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的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()
效果:
带输入默认值的弹窗
另外,如果alertViewStyle设为loginAndPasswordInput,textField(at: 1)才会初始化。
网友评论