ios - UIAlertController addTextFieldWithConfigurationHandler。奇怪的功能

标签 ios swift uialertcontroller

我正在制作一个包含几个文本字段的警报,一旦点击保存,它就会保存在服务器上。我设法让它发挥作用,但发现了一些我不明白的奇怪之处。我不确定如何用文字解释它,所以我会发布有问题的代码。

var enteredName: UITextField!

let myAlert: UIAlertController = UIAlertController(title: "", message: nil, preferredStyle: .Alert)
let saveAction: UIAlertAction = UIAlertAction(title: "Save", style: .Default) { action -> Void in
    println(self.enteredName.text)
}
myAlert.addAction(saveAction)
myAlert.addTextFieldWithConfigurationHandler { textField -> Void in
    textField.placeholder = "Name"
    self.enteredName = textField
}
self.presentViewController(myAlert, animated: true, completion: nil)

现在,上面的代码可以工作了,我没有遇到任何问题,但是,我最初有一个非常相似的代码块,但没有工作。上面的代码片段将显示带有文本字段的警报,在输入内容并点击保存后,它将打印您输入的内容。下面的代码本应执行此操作但打印了空白行,我假设为空字符串。

var enteredName: String!

let myAlert: UIAlertController = UIAlertController(title: "", message: nil, preferredStyle: .Alert)
let saveAction: UIAlertAction = UIAlertAction(title: "Save", style: .Default) { action -> Void in
    println(self.enteredName)
}
myAlert.addAction(saveAction)
myAlert.addTextFieldWithConfigurationHandler { textField -> Void in
    textField.placeholder = "Name"
    self.enteredName = textField.text
}
self.presentViewController(myAlert, animated: true, completion: nil)

如您所见,没有太大变化,对我来说,两个代码块看起来都应该可以运行。不同之处:在不起作用的代码片段中

  1. 变量是字符串而不是 UITextField
  2. 变量被保存到 textField.text 而不是 textField
  3. 警报正在打印 self.enteredName 而不是 self.enteredName.text

所以我的问题是,为什么底部的文本 block 不能正常工作,而顶部的文本 block 可以?

最佳答案

addTextFieldConfigurationHandler 方法在用户有机会输入任何内容并按保存之前被调用(因此,在您放入 saveAction 的代码被执行之前).

在底部示例中,您曾经唯一一次将任何内容分配给您的 enteredName 字符串是在添加文本字段配置处理程序时。在用户看到文本字段后的任何时候都不会调用文本字段配置处理程序(因此永远不会在用户有机会在文本字段中键入之后)。

而且字符串变量不能神奇地从文本字段中获取值。

关于ios - UIAlertController addTextFieldWithConfigurationHandler。奇怪的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29423328/

相关文章:

arrays - 如何让两个变量相互依赖

ios - swift-在ios中使用未声明的类型 'firebase'

ios - 如何在 swift ios 中创建自定义 UIAlertController?

ios - Objective-C/CocoaHTTPServer - 是否可以在没有任何 UI 的情况下将 CocoaHTTPServer 作为后台应用程序运行?

ios - 没有收到来自 LinkedIn Objective-C 的电子邮件

ios - 无法在 iOS 中的容器 View 中显示 View 容器

ios - 点击时删除 GMSMarker

ios - 如何在 Swift 的 UIAlertController 中为 addTextField 设置默认文本

ios - 图像适合 UIImageView 无需拉伸(stretch)

ios - 有没有办法授权我的应用程序访问 iWatch HealthKit 数据?