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