在swift中显示alertController中的textField
刚才我写了下面提供的代码。 我想为下面的代码产生输出,但是当我运行它时会崩溃,并显示nil
。
class ViewController: UIViewController ,UITableViewDataSource{ var names = [String]() @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() title = "\"The List\"" tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell") // Do any additional setup after loading the view, typically from a nib. } @IBAction func addName(sender: AnyObject) { let alert = UIAlertController(title: "New name", message: "Add one new name here", preferredStyle: .Alert) let saveAction = UIAlertAction(title: "Save", style: .Default, handler: {(action:UIAlertAction) ->Void in alert.addTextFieldWithConfigurationHandler{(textField:UITextField)->Void in alert.view.endEditing(true) let textField = alert.textFields?.last self.names.append(textField!.text!) self.tableView.reloadData() } }) let cancleAction = UIAlertAction(title: "Cancel", style: .Default, handler: {(action:UIAlertAction) ->Void in alert.addTextFieldWithConfigurationHandler {(textFiled:UITextField) ->Void in } }) alert.addAction(saveAction) alert.addAction(cancleAction) self.presentViewController(alert,animated:true,completion:nil) } //MARK:-TableViewDataSource func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return names.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell") cell?.textLabel?.text = names[indexPath.row] return cell! } }
如何解决它?
在Swift中查看我的参考博客: UIAlertController
在UIALertController
添加textField的UIALertController
:
let alertController = UIAlertController(title: "PlainTextStyle", message: "PlainTextStyle AlertView.", preferredStyle: UIAlertControllerStyle.Alert) alertController.addTextFieldWithConfigurationHandler { (textField : UITextField) -> Void in textField.placeholder = "Login" } let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel) { (result : UIAlertAction) -> Void in print("Cancel") } let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default) { (result : UIAlertAction) -> Void in print(alertController.textFields?.first?.text) } alertController.addAction(cancelAction) alertController.addAction(okAction) self.presentViewController(alertController, animated: true, completion: nil)
更新Swift 3.0
let alertController = UIAlertController(title: "PlainTextStyle", message: "PlainTextStyle AlertView.", preferredStyle: UIAlertControllerStyle.alert) alertController.addTextField { (textField : UITextField) -> Void in textField.placeholder = "Login" } let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel) { (result : UIAlertAction) -> Void in } let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default) { (result : UIAlertAction) -> Void in } alertController.addAction(cancelAction) alertController.addAction(okAction) self.present(alertController, animated: true, completion: nil)
UIALertController中的TextField:
错误是我忘记添加到AlertController的文本域…这么简单