Abrufwert von TextField in iOS-Warnung in Swift abrufen

120

Ich versuche, mit der Eingabe eine Warnmeldung zu erstellen und dann den Wert aus der Eingabe abzurufen. Ich habe viele gute Tutorials gefunden, wie man das Eingabetextfeld erstellt. Ich kann den Wert jedoch nicht aus der Warnung abrufen.

ntoonio
quelle
Ein Aktionsalarm unter iOS?
Andy Ibanez
@AndyIbanez Ja, das habe ich nicht erwähnt!
Ntoonio

Antworten:

333

Aktualisiert für Swift 3 und höher:

//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.

Angenommen, Sie möchten einen Aktionsalarm unter 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)
Andy Ibanez
quelle
Kein Problem. Bitte denken Sie daran, dies als Akzeptiert zu markieren, wenn es Ihnen geholfen hat. Vielen Dank!
Andy Ibanez
Hallo @AndyIbanez, ich versuche, Ihren Code in meiner App zu implementieren, aber er gibt den Fehler "Verwendung der nicht deklarierten Kennung var" an. Ich bin neu bei Xcode. Ich entschuldige mich, wenn dies ein grundlegender Fehler in meinem Namen ist
Sjharrison,
@Sjharrison Mein Code ist für Swift. Der einzige Grund, warum ich mir vorstellen kann, dass Sie Probleme mit dem varSchlüsselwort haben, ist, wenn Sie in Objective-C schreiben.
Andy Ibanez
1
Kann mir jemand erklären warum das so ist [weak alert]? Ich schaue auf Swift 3.
Andrej
3
Für Swift 3 ist die Warnung in Schritt 3 optional. Wird "?" let textField = alert?.textFields![0] // Force unwrapping because we know it exists. print("Text field: \(textField?.text)")
James
27

Swift 3/4

Sie können die folgende Erweiterung für Ihre Bequemlichkeit verwenden.

Verwendung innerhalb eines 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 ?? "")")
}

Der Erweiterungscode:

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)
    }
}
Gunhan
quelle
Beachten Sie nur, dass Sie, wenn Sie die Aktion "Hinzufügen" präsentieren möchten, sicherstellen müssen, dass der Stil "Standard" nicht "destruktiv" ist - alert.addAction (UIAlertAction (Titel: actionTitle, Stil: .default ...
Bishal Ghimire
11

In Swift5 und Xcode 10

Fügen Sie zwei Textfelder mit den Aktionen Speichern und Abbrechen hinzu und lesen Sie die Textdaten von TextFields

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)

}

Weitere Erklärungen finden Sie unter https://medium.com/@chan.henryk/alert-controller-with-text-field-in-swift-3-bda7ac06026c

iOS
quelle