Get input value from TextField in iOS alert in Swift Get input value from TextField in iOS alert in Swift ios ios

Get input value from TextField in iOS alert in Swift


Updated for Swift 3 and above:

//1. Create the alert controller.let alert = UIAlertController(title: "Some Title", message: "Enter a text", preferredStyle: .alert)//2. Add the text field. You can configure it however you need.alert.addTextField { (textField) in    textField.text = "Some default text"}// 3. Grab the value from the text field, and print it when the user clicks OK.alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { [weak alert] (_) in    let textField = alert.textFields![0] // Force unwrapping because we know it exists.    print("Text field: \(textField.text)")}))// 4. Present the alert.self.present(alert, animated: true, completion: nil)

Swift 2.x

Assuming you want an action alert on iOS:

//1. Create the alert controller.            var alert = UIAlertController(title: "Some Title", message: "Enter a text", preferredStyle: .Alert)//2. Add the text field. You can configure it however you need.alert.addTextFieldWithConfigurationHandler({ (textField) -> Void in    textField.text = "Some default text."})//3. Grab the value from the text field, and print it when the user clicks OK. alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { [weak alert] (action) -> Void in    let textField = alert.textFields![0] as UITextField    println("Text field: \(textField.text)")}))// 4. Present the alert.self.presentViewController(alert, animated: true, completion: nil)


Swift 5

You can use the below extension for your convenience.

Usage inside a ViewController:

showInputDialog(title: "Add number",                subtitle: "Please enter the new number below.",                actionTitle: "Add",                cancelTitle: "Cancel",                inputPlaceholder: "New number",                inputKeyboardType: .numberPad, actionHandler:                        { (input:String?) in                            print("The new number is \(input ?? "")")                        })

The extension code:

extension UIViewController {    func showInputDialog(title:String? = nil,                         subtitle:String? = nil,                         actionTitle:String? = "Add",                         cancelTitle:String? = "Cancel",                         inputPlaceholder:String? = nil,                         inputKeyboardType:UIKeyboardType = UIKeyboardType.default,                         cancelHandler: ((UIAlertAction) -> Swift.Void)? = nil,                         actionHandler: ((_ text: String?) -> Void)? = nil) {                let alert = UIAlertController(title: title, message: subtitle, preferredStyle: .alert)        alert.addTextField { (textField:UITextField) in            textField.placeholder = inputPlaceholder            textField.keyboardType = inputKeyboardType        }        alert.addAction(UIAlertAction(title: actionTitle, style: .default, handler: { (action:UIAlertAction) in            guard let textField =  alert.textFields?.first else {                actionHandler?(nil)                return            }            actionHandler?(textField.text)        }))        alert.addAction(UIAlertAction(title: cancelTitle, style: .cancel, handler: cancelHandler))                self.present(alert, animated: true, completion: nil)    }}


In Swift5 ans Xcode 10

Add two textfields with Save and Cancel actions and read TextFields text data

func alertWithTF() {    //Step : 1    let alert = UIAlertController(title: "Great Title", message: "Please input something", preferredStyle: UIAlertController.Style.alert )    //Step : 2    let save = UIAlertAction(title: "Save", style: .default) { (alertAction) in        let textField = alert.textFields![0] as UITextField        let textField2 = alert.textFields![1] as UITextField        if textField.text != "" {            //Read TextFields text data            print(textField.text!)            print("TF 1 : \(textField.text!)")        } else {            print("TF 1 is Empty...")        }        if textField2.text != "" {            print(textField2.text!)            print("TF 2 : \(textField2.text!)")        } else {            print("TF 2 is Empty...")        }    }    //Step : 3    //For first TF    alert.addTextField { (textField) in        textField.placeholder = "Enter your first name"        textField.textColor = .red    }    //For second TF    alert.addTextField { (textField) in        textField.placeholder = "Enter your last name"        textField.textColor = .blue    }    //Step : 4    alert.addAction(save)    //Cancel action    let cancel = UIAlertAction(title: "Cancel", style: .default) { (alertAction) in }    alert.addAction(cancel)    //OR single line action    //alert.addAction(UIAlertAction(title: "Cancel", style: .default) { (alertAction) in })    self.present(alert, animated:true, completion: nil)}

For more explanation https://medium.com/@chan.henryk/alert-controller-with-text-field-in-swift-3-bda7ac06026c