UIAlertView + TextField = Ошибка?

Я делаю приложение, чтобы данные можно было сохранить в виде таблицы, и я хотел использовать контроллер UIAlertView таким образом, чтобы люди могли использовать его для создания новой ячейки (задачи), но я знаю, как создать текстовое поле в UIAlertView, но как использовать данные textField и использовать их в кнопке действия UIAlertView!

@IBAction func addNewTask() {

        var alertController = UIAlertController(title: "Add A New Task", message: "Add The Correct Information To Add A New Task!", preferredStyle: .Alert)

        // Create the actions
        var Exit = UIAlertAction(title: "Add Task", style: UIAlertActionStyle.Default) {
            UIAlertAction in
            NSLog("OK Pressed")


        }
        var cancelAction = UIAlertAction(title: "Exit App", style: UIAlertActionStyle.Cancel) {
            UIAlertAction in
            NSLog("User Exited The App!")
            exit(2)

        }

        alertController.addTextFieldWithConfigurationHandler { (textField: UITextField!) -> Void in
            // Here you can configure the text field (eg: make it secure, add a placeholder, etc)

        }

        // Add the actions
        alertController.addAction(Exit)

        alertController.addAction(cancelAction)

        // Present the controller
        self.presentViewController(alertController, animated: true, completion: nil)



    }

Это код, но как я могу использовать данные из alertController.addTextFieldWithConfigureationHandler и поместить их в действие Exit! Итак, главное, что я хочу, чтобы это было просто знать, - это когда пользователь вводит текст в текстовое поле и нажимает Exit, метка изменится на этот текст из textField, но без использования viewController! Я использую Swift, Xcode 6.3.1

Спасибо,

Джордж Барлоу

p.s. Простите за длиннющий вопрос!


person george barlow    schedule 07.06.2015    source источник


Ответы (3)


В вашем UIAlertAction с именем Exit (кстати, вам следует подумать об изменении имени на что-то вроде exit или exitAction) вы можете получить доступ к UITextField и его содержимому следующим образом:

// Create the actions
var Exit = UIAlertAction(title: "Add Task", style: UIAlertActionStyle.Default) {
    UIAlertAction in
    let loginTextField = alertController.textFields![0] as! UITextField
    let inputText = loginTextField.text
    println("The input text is: \(inputText)")
    NSLog("OK Pressed")
}
person Kumuluzz    schedule 07.06.2015

"... вы также можете добавить текстовые поля в интерфейс предупреждений. Контроллер предупреждений позволяет вам предоставить блок для настройки ваших текстовых полей перед отображением. Контроллер предупреждений поддерживает ссылку на каждое текстовое поле, чтобы вы могли получить доступ к его значению позже . " https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIAlertController_class/index.html#//apple_ref/occ/cl/UIAlertController

У UIAlertViewController есть свойство текстового поля, к которому вы можете получить доступ.

alertController.textFields

Текстовые поля добавляются в этот массив в том же порядке, в котором вы добавляли их в контроллер предупреждений.

Внутри вашего завершения для действия выхода:

UITextField *taskTextField = alertController.textFields.firstObject

* Изменить: быстро:

if let taskTextField = alertController.textFields![0] as! UITextField {
    let taskText = taskTextField.text
    ...
}
person robotwholearned    schedule 07.06.2015

Вы можете сделать что-то вроде этого:

class ViewController: UIViewController {

        @IBOutlet weak var myLabel: UILabel!
        var mytextField: UITextField!

        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.

        }

        override func viewDidAppear(animated: Bool) {
            addNewTask()
        }

        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }


        func addNewTask() {
            var alertController = UIAlertController(title: "Add A New Task", message: "Add The Correct Information To Add A New Task!", preferredStyle: .Alert)

            // Create the actions
            var Exit = UIAlertAction(title: "Add Task", style: UIAlertActionStyle.Default) {
                UIAlertAction in
                NSLog("OK Pressed")

                self.myLabel.text = self.mytextField.text


            }
            var cancelAction = UIAlertAction(title: "Exit App", style: UIAlertActionStyle.Cancel) {
                UIAlertAction in
                NSLog("User Exited The App!")
                exit(2)

            }

            alertController.addTextFieldWithConfigurationHandler { (textField: UITextField!) -> Void in
                // Here you can configure the text field (eg: make it secure, add a placeholder, etc)

                self.mytextField = textField
            }

            // Add the actions
            alertController.addAction(Exit)

            alertController.addAction(cancelAction)

            // Present the controller
            self.presentViewController(alertController, animated: true, completion: nil)
        }


    }
person Himanshu gupta    schedule 07.06.2015