Swift'de iOS uyarısında TextField'den giriş değeri alın


122

Giriş ile bir uyarı mesajı vermeye ve ardından girişten değeri almaya çalışıyorum. Giriş metin alanının nasıl yapılacağına dair birçok iyi öğretici buldum. ancak uyarıdan değeri alamıyorum.


İOS'ta bir eylem uyarısı mı?
Andy Ibanez

@AndyIbanez Evet, bundan bahsetmedim!
ntoonio

Yanıtlar:


336

Swift 3 ve üzeri için güncellendi:

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

İOS'ta bir eylem uyarısı istediğinizi varsayarsak:

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

Problem değil. Size yardımcı olduysa, lütfen bunu Kabul Edildi olarak işaretlemeyi unutmayın. Teşekkürler!
Andy Ibanez

Merhaba @AndyIbanez Kodunuzu uygulamamda uygulamaya çalışıyorum, ancak "Belirtilmemiş tanımlayıcı kullanımı var" hatasını belirten
Xcode'da yeniyim

@Sjharrison Kodum Swift için. Bunu düşünebilmemin tek nedeni, varanahtar kelimeyle ilgili sorunlara neden olacaktı , Objective-C'de yazıyor olman.
Andy Ibanez

1
Biri nedenini açıklayabilir [weak alert]mi? Swift 3'e bakıyorum.
Andrej

3
3. adımdaki Swift 3 uyarısı isteğe bağlıdır, "?" let textField = alert?.textFields![0] // Force unwrapping because we know it exists. print("Text field: \(textField?.text)")
James

27

Swift 3/4

Size kolaylık sağlamak için aşağıdaki uzantıyı kullanabilirsiniz.

A içinde kullanım 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 ?? "")")
}

Uzantı kodu:

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

"Ekle" eylemini sunacaksanız, stilin "varsayılan" "yıkıcı" değilse emin olun - alert.addAction (UIAlertAction (title: actionTitle, style: .default ...
Bishal Ghimire

13

Gelen Swift5 Xcode 10 ans

Kaydet ve İptal eylemleriyle iki metin alanı ekleyin ve TextFields metin verilerini okuyun

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)

}

Daha fazla açıklama için https://medium.com/@chan.henryk/alert-controller-with-text-field-in-swift-3-bda7ac06026c

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.