Nhận giá trị đầu vào từ cảnh báo TextField trong iOS bằng Swift


121

Tôi đang cố tạo thông báo cảnh báo với đầu vào và sau đó nhận giá trị từ đầu vào. Tôi đã tìm thấy nhiều hướng dẫn hay về cách tạo trường văn bản đầu vào. nhưng tôi không thể nhận được giá trị từ cảnh báo.


Một cảnh báo hành động trên iOS?
Andy Ibanez

@AndyIbanez Vâng, không đề cập đến điều đó!
ntoonio

Câu trả lời:


334

Đã cập nhật cho Swift 3 trở lên:

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

Giả sử bạn muốn một cảnh báo hành động trên 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)

Không thành vấn đề. Hãy nhớ đánh dấu điều này là Đã chấp nhận nếu nó giúp bạn. Cảm ơn!
Andy Ibanez

Hi @AndyIbanez Tôi đang cố gắng để thực hiện mã của bạn trên ứng dụng của tôi, tuy nhiên nêu nó báo lỗi "Sử dụng var định không khai báo" Tôi mới đến Xcode để xin lỗi nếu điều này là một lỗi cơ bản trên danh nghĩa của tôi
Sjharrison

@Sjharrison Mã của tôi là dành cho Swift. Lý do duy nhất tôi có thể nghĩ rằng sẽ khiến bạn gặp rắc rối với vartừ khóa là nếu bạn đang viết bằng Objective-C.
Andy Ibanez

1
Bất cứ ai có thể giải thích tại sao [weak alert]? Tôi đang xem Swift 3.
Andrej

3
Đối với cảnh báo Swift 3 ở bước 3. là tùy chọn, cần có "?" let textField = alert?.textFields![0] // Force unwrapping because we know it exists. print("Text field: \(textField?.text)")
James

27

Swift 3/4

Bạn có thể sử dụng phần mở rộng bên dưới để thuận tiện cho bạn.

Cách sử dụng bên trong 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 ?? "")")
}

Mã phần mở rộng:

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

chỉ cần lưu ý rằng nếu bạn định trình bày hành động "Thêm", hãy đảm bảo phong cách nếu "mặc định" không phải là "phá hoại" - alert.addAction (UIAlertAction (title: actionTitle, style:
.default

13

Trong Swift5 ans Xcode 10

Thêm hai trường văn bản với các hành động Lưu và Hủy và đọc dữ liệu văn bản Trường văn bản

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)

}

Để biết thêm giải thích, https://medium.com/@chan.henryk/alert-controller-with-text-field-in-swift-3-bda7ac06026c

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.