Get input value from TextField in iOS alert in Swift

后端 未结 3 1004
不知归路
不知归路 2020-12-07 10:48

I\'m trying to make an alert message with input, and then get the value from the input. I\'ve found many good tutorials how to make the input text field. but I can\'t get th

相关标签:
3条回答
  • 2020-12-07 11:24

    Swift 3/4

    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)
    { (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)
        }
    }
    
    0 讨论(0)
  • 2020-12-07 11:30

    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)
    
    0 讨论(0)
  • 2020-12-07 11:33

    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

    0 讨论(0)
提交回复
热议问题