Swift: доступ к текстовому полю / переход к новому ViewController в UIAlertController

#ios #swift #textfield #uialertcontroller

#iOS #swift #текстовое поле #uialertcontroller

Вопрос:

Я использую UIAlertController для отображения текстового поля для ввода номера телефона. Когда я нажимаю OK, я бы хотел, чтобы текстовое содержимое текстового поля сохранялось в переменной, чтобы я мог выполнить с ним некоторые операции. Вот код:

 @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 и распечатать его содержимое, оно кажется пустым, поскольку консоль ничего не показывает. Есть ли способ получить доступ к содержимому этого текстового поля или даже иметь для него идентификатор? (UIAlertController, похоже, не позволяет мне попробовать «alc.TextField.text) Я предполагаю, что то, как я работаю с «config», неверно, но я до сих пор не знаю, как получить доступ к текстовому полю этого контроллера. Любая помощь будет оценена. Спасибо!

Ответ №1:

Есть несколько проблем с тем, как вы собираетесь это сделать.

Настройка текстового поля

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

config Обработчик, к которому вы переходите 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)
    }))
  

Здесь две проблемы — 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)
    }))