如何获取 UIAlertController 的文本字段值并将其用于其他功能? (斯威夫特 3)
Posted
技术标签:
【中文标题】如何获取 UIAlertController 的文本字段值并将其用于其他功能? (斯威夫特 3)【英文标题】:How do I get the textfield value of a UIAlertController and use it in other functions? (Swift 3) 【发布时间】:2017-04-17 07:10:04 【问题描述】:基本上,我想要 UIViewController 的文本字段的值,然后用它来执行 if-else 语句。
我将遍历字典,如果(字典的)值大于和/或等于用户输入,我将通过 tableview 显示键。
我做了一个在加载应用程序时显示的警告框。我创建了一个函数,然后在 viewDidLoad() 函数下调用它。可以在这里看到:
func alertBox()
// create String objects for the title and the message
let title = "Enter your GPA"
let message = "With your help, we can list courses you are most likely eligible for based on the GPA you provide to us."
// create a UIAlertController object
let alert = UIAlertController(title: title,
message: message,
preferredStyle: UIAlertControllerStyle.alert)
// create a UIAlertAction object
//2. Add the text field. You can configure it however you need.
alert.addTextField (textField) in
textField.text = ""
// 3. Grab the value from the text field, and print it when the user clicks OK.
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: [weak alert] (_) in
let textField = alert?.textFields![0] // Force unwrapping because we know it exists.
if let textAlert = textField?.text
print("Text field: \(textAlert)")
let item = Double(textAlert)
print(item!)
let unwrappedvalue = item!
self.dc.setUserInput(userI: unwrappedvalue)
print(self.dc.getUserInput())
))
// add the UIAlertAction object to the UIAlertController object
let cancelAction = UIAlertAction(title: "Cancel",
style: .cancel,
handler: nil)
alert.addAction(cancelAction)
// display the UIAlertController object
present(alert, animated: true, completion: nil)
这是我的 viewDidLoad() 函数:
override func viewDidLoad()
super.viewDidLoad()
alertBox()
如您所见,我实际上在 DataController 类中做了一个 get/set 方法。这样我可以设置值,然后在以后的方法中获取值。我用过它,但它似乎根本没有保存我的价值观。我还尝试创建一个全局变量,然后将文本字段的值存储到该变量中。
即
var textOfTF : Double = 0.0
然后在 alertBox() 函数中:
if let textAlert = textField?.text
print("Text field: \(textAlert)")
let item = Double(textAlert)
print(item!)
self.textOfTF = item!
/*
self.dc.setUserInput(userI: unwrappedvalue)
print(self.dc.getUserInput())
*/
这是我的 DataController 类中的 get/set 函数:
var userInput : Double = 0.0
func getUserInput() -> Double
return userInput
func setUserInput(userI: Double)
userInput = userI
return
当我执行 alert.addAction 方法时它设法保存了(就是这个):
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: [weak alert] (_) in
let textField = alert?.textFields![0] // Force unwrapping because we know it exists.
if let textAlert = textField?.text
print("Text field: \(textAlert)")
let item = Double(textAlert)
print(item!)
let unwrappedvalue = item!
self.dc.setUserInput(userI: unwrappedvalue)
print(self.dc.getUserInput())
))
但是在该方法之外打印只是向我打印了一个 0.0 值。
我的代码有什么问题吗?请指教。
附: self.dc.setUserInput(..) 中的 dc 是我声明 DataController 类的变量。
在 TableViewController 类中:
var dc = DataController.sharedInstance
在 DataController 类中:
static var sharedInstance = DataController()
【问题讨论】:
【参考方案1】:您可以像这样轻松地为用户 GPA 值定义静态全局值:
struct defaultsKeys
static var userGPA:Double = 0.0
之后,您可以在警报框中的 textField 值中设置此值:
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: [weak alert] (_) in
let textField = alert?.textFields![0] // Force unwrapping because we know it exists.
if let textAlert = textField?.text
print("Text field: \(textAlert)")
defaultsKeys.userGPA = Double(textAlert)!
您可以在每个视图控制器中使用此 userGPA
值并调用:
defaultsKeys.userGPA
【讨论】:
对其进行了测试,它给了我相同的结果,但仍然无法存储。 也许您可以在此示例中大致了解静态全局变量的使用情况:***.com/a/43466290/3401842【参考方案2】:我已经设法解决了。是的,我一直将它保存到 DataController 但没有单例方法。所以使用单例方法来保存和检索数据。
即
static var sharedInstance = DataController
private init()
存储在变量中:
var value : Double = 0.0
在 TableViewController 中,调用:
Datacontroller.sharedInstance.value
感谢 kkakkurt 帮助我,但这真的很简单。我不知道我怎么忽略了它。
【讨论】:
以上是关于如何获取 UIAlertController 的文本字段值并将其用于其他功能? (斯威夫特 3)的主要内容,如果未能解决你的问题,请参考以下文章
iOS UI 测试:如何获取 UIAlertController 的消息
注册通知时如何从存在的 UIAlertcontroller 获取 UIAlertAction
如何在Objective C中通过UIView获取UIAlertController?
在 UIAlertController 下获取最顶层的视图控制器