0

我正在使用 UIAlertController 显示一个文本字段来输入电话号码。当我单击“确定”时,我希望将文本字段的文本内容存储在一个变量中,以便可以对其进行一些操作。这是代码:

@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”是错误的,但我仍然不知道如何访问这个控制器的文本字段。任何帮助将不胜感激。谢谢!

4

1 回答 1

0

您处理此问题的方式存在一些问题。

设置文本字段

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

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

    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)
    }))

这里有两个问题——popupText只是一个空字符串变量,它没有以任何方式链接到文本字段、警报操作或警报控制器。您想要访问文本字段本身,您可以使用alc.textFields[0]. 其次,看起来您希望将文本字段的值存储在 中popupText,但这是该方法的局部变量,实际上无法在其他任何地方访问。根据你想用它做什么,我可能会建议将电话号码存储在你的类的实例属性中。在任何情况下,你都想要这样的东西:

    alc.addAction(UIAlertAction(title: "Submit", style: UIAlertActionStyle.Default, handler:{ UIAlertAction in
        println(alc.textFields[0].text)
        self.performSegueWithIdentifier("popupSegue", sender: alc)
    }))
于 2014-06-27T19:18:41.260 回答