Dapatkan nilai input dari TextField di peringatan iOS di Swift

121

Saya mencoba membuat pesan peringatan dengan masukan, lalu mendapatkan nilai dari masukan tersebut. Saya telah menemukan banyak tutorial bagus tentang cara membuat kolom teks masukan. tapi saya tidak bisa mendapatkan nilai dari peringatan itu.

ntoonio
sumber
Peringatan tindakan di iOS?
Andy Ibanez
@AndyIbanez Ya, tidak menyebutkan itu!
ntoonio

Jawaban:

334

Diperbarui untuk Swift 3 ke atas:

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

Cepat 2.x

Dengan asumsi Anda menginginkan peringatan tindakan di 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
sumber
Bukan masalah. Harap ingat untuk menandai ini sebagai Diterima jika itu membantu Anda. Terima kasih!
Andy Ibanez
Hai @AndyIbanez Saya mencoba menerapkan kode Anda di aplikasi saya, namun yang menyatakan kesalahan "Penggunaan var pengenal tidak dideklarasikan" Saya baru mengenal Xcode jadi maaf jika ini adalah kesalahan dasar atas nama saya
Sjharrison
@Sjharon Kode saya untuk Swift. Satu-satunya alasan saya dapat memikirkan itu akan menyebabkan Anda bermasalah dengan varkata kunci adalah jika Anda menulis di Objective-C.
Andy Ibanez
1
Adakah yang bisa menjelaskan mengapa [weak alert]? Saya melihat Swift 3.
Andrej
3
Untuk peringatan Swift 3 di langkah 3. bersifat opsional, diperlukan "?" let textField = alert?.textFields![0] // Force unwrapping because we know it exists. print("Text field: \(textField?.text)")
Yakobus
27

Cepat 3/4

Anda dapat menggunakan ekstensi di bawah ini untuk kenyamanan Anda.

Penggunaan di dalam 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 ?? "")")
}

Kode ekstensi:

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
sumber
cukup perhatikan bahwa jika Anda akan menampilkan tindakan "Tambahkan" pastikan gayanya jika "default" bukan "destruktif" - alert.addAction (UIAlertAction (title: actionTitle, style: .default ...
Bishal Ghimire
13

Di Swift5 dan Xcode 10

Tambahkan dua bidang teks dengan tindakan Simpan dan Batalkan dan baca data teks BidangTeks

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)

}

Untuk penjelasan lebih lanjut https://medium.com/@chan.henryk/alert-controller-with-text-field-in-swift-3-bda7ac06026c

iOS
sumber