给UIAlertView里的UITextField添加初始文本

swift版本
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9

Title for English:
Init a text field in a UIAlertView
Default text in UIAlertVIew on show

If you can only read English, go to see the last block of my source code.

本来这么点事儿完全没有必要写一篇日志,尤其是UIAlertView已经被标记为过时的情况下。不过很多项目用到的第三方弹窗控件还是基于UIAlertView的,最重要的是,谷歌搜出来的stackoverflow的前几帖居然都说得乱七八糟。所以我还是写一篇吧。

我们用UIAlertView写一个带输入的弹窗,通常这么写:

let alert = UIAlertView.init(title: "请输入", message: "随便什么都可以", delegate: self, cancelButtonTitle: "取消")
alert.alertViewStyle = .plainTextInput
alert.show()

效果是这样的


给UIAlertView里的UITextField添加初始文本_第1张图片
弹窗

有的时候我们希望在这个文本里放一个默认值。需要调用UIAlertView的textField方法,以获取其文本框对象,然后赋值。

let alert = UIAlertView.init(title: "请输入", message: "随便什么都可以", delegate: self, cancelButtonTitle: "取消")
alert.textField(at: 0)?.text = "随便"
alert.alertViewStyle = .plainTextInput
alert.show()

然后发现这么写无效……

经过调试发现,UIAlertView在init的时候根本没有生成textField,等alertViewStyle被设置为plainTextInput了以后才初始化了textField。
所以代码需要改成这样:

let alert = UIAlertView.init(title: "请输入", message: "随便什么都可以", delegate: self, cancelButtonTitle: "取消")
alert.alertViewStyle = .plainTextInput
alert.textField(at: 0)?.text = "随便"  //Must after set alertViewStyle
alert.show()

效果:


给UIAlertView里的UITextField添加初始文本_第2张图片
带输入默认值的弹窗

另外,如果alertViewStyle设为loginAndPasswordInput,textField(at: 1)才会初始化。

你可能感兴趣的:(给UIAlertView里的UITextField添加初始文本)