Swift:在UIAlertController中访问textfield / segue到新的ViewController

时间:2014-06-27 17:45:42

标签: ios swift textfield uialertcontroller

我使用UIAlertController显示textField以输入电话号码。当我单击OK时,我希望将textfield的文本内容存储在一个变量中,这样我就可以对它进行一些操作。这是代码:

@IBAction func popup(sender : AnyObject) {
    var popupText: String = ""
    func config(textField: UITextField!)->Void{
        popupText = textField.text
    }

    var alc: UIAlertController = UIAlertController(title: "Phone", message: "Please enter phone #: ", preferredStyle: UIAlertControllerStyle.Alert)
    alc.addTextFieldWithConfigurationHandler(config)
    alc.addAction(UIAlertAction(title: "Submit", style: UIAlertActionStyle.Default, handler:{ UIAlertAction in
            print(popupText)
            self.performSegueWithIdentifier("popupSegue", sender: alc)


        }))
    alc.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil))
    self.presentViewController(alc, animated: true, completion: nil)
}

当我尝试访问popupText并打印其内容时,它似乎是空的,因为控制台没有显示任何内容。有没有办法访问这个textField的内容,甚至有一个标识符? (UIAlertController似乎没有让我尝试" alc.textField.text)我猜测我是如何使用" config"是错的,但我仍然不知道如何访问该控制器的文本字段。任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

你的方式存在一些问题。

设置文本字段

    var popupText: String = ""
    func config(textField: UITextField!)->Void{
        popupText = textField.text
    }
    ...
    alc.addTextFieldWithConfigurationHandler(config)

您传递给config的{​​{1}}处理程序用于配置新文本字段,但看起来您正在尝试访问其值。文本字段是全新的,因此它将是空的,我认为这对您没有用。如果您需要更改文本字段的某些属性,这是正确的位置,否则只需将addTextFieldWithConfigurationHandler传递给nil

addTextField...

访问文本字段的值

    func config(textField: UITextField!)->Void{
        textField.textColor = UIColor.redColor()
    }

这里有两个问题 - alc.addAction(UIAlertAction(title: "Submit", style: UIAlertActionStyle.Default, handler:{ UIAlertAction in print(popupText) self.performSegueWithIdentifier("popupSegue", sender: alc) })) 只是一个空的String变量,它没有以任何方式链接到文本字段,警报操作或警报控制器。您想要访问文本字段本身,您可以使用popupText找到该字段。其次,它看起来你希望将文本字段的值存储在alc.textFields[0]中,但这是该方法的局部变量,并且实际上并不能在其他任何地方访问。根据您的想法,我建议您将电话号码存储在班级的实例属性中。无论如何,你想要更像这样的东西:

popupText