简体   繁体   English

从 Swift 中的 iOS 警报中的 TextField 获取输入值

[英]Get input value from TextField in iOS alert in Swift

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 the value from the alert.但我无法从警报中获得价值。

Updated for Swift 3 and above:为 Swift 3 及更高版本更新:

//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斯威夫特 2.x

Assuming you want an action alert on iOS:假设您想要在 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)

Swift 5斯威夫特 5

You can use the below extension for your convenience.为方便起见,您可以使用以下扩展程序。

Usage inside a ViewController :ViewController用法:

showInputDialog(title: "Add number",
                subtitle: "Please enter the new number below.",
                actionTitle: "Add",
                cancelTitle: "Cancel",
                inputPlaceholder: "New number",
                inputKeyboardType: .numberPad, actionHandler:
                        { (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)
    }
}

In Swift5 ans Xcode 10Swift5和 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更多解释https://medium.com/@chan.henryk/alert-controller-with-text-field-in-swift-3-bda7ac06026c

Swift version: 5.+ Swift 版本:5.+

Create a new TextField variable in current scope and assign it to alertTextField in alert.addTextField completion handler.在当前 scope 中创建一个新的TextField变量,并将其分配给alert.addTextField完成处理程序中的 alertTextField。 Use textField 's value inside UIAlertAction completion handler.UIAlertAction完成处理程序中使用textField的值。

@IBAction func addButtonPressed(_ sender: UIBarButtonItem) {
          //Variable to store alertTextField
            var textField = UITextField()
            
            let alert = UIAlertController(title: "Add new item", message: "", preferredStyle: .alert)
            alert.addTextField { alertTextField in
                alertTextField.placeholder = "Create new item"
                
                //Copy alertTextField in local variable to use in current block of code
                textField = alertTextField
            }
            
            let action = UIAlertAction(title: "Add item", style: .default) { action in
                //Prints the alertTextField's value
                print(textField.text!)
            }
            
            alert.addAction(action)
            present(alert, animated: true, completion: nil)
        }
let ac = UIAlertController(title: "title", message: "message", preferredStyle: .alert)
ac.addTextField()

let submitAction = UIAlertAction(title: "Submit", style: .default) { [weak self, weak ac] action in
    guard let wordToget = ac?.textFields?[0].text else { return }
    //here you can do what you need like
    print(wordToget)
}

ac.addAction(submitAction)
present(ac, animated: true)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 从警报textField获得价值 - Get value from alert textField ios Swift 2:扩展名-带有文本字段的警报 - ios Swift 2: extension - Alert with textfield 隐藏警报控制器之前检查文本字段中的值-iOS Swift - Checking the value in textfield before alert controller hides - iOS swift 是否可以从当前警报控制器(或操作表中的文本字段)内部调用警报控制器? Xcode 8,Swift 3,IOS - Is there a way to call an alert controller from inside a current alert controller (or a textfield in an action sheet)? Xcode 8, Swift 3, IOS 如何从警报文本字段中的用户输入获取字符串 - how to get the string from user input in alert textfield Swift-原型单元从TextField获得价值 - Swift - Prototype Cell get value from TextField 标签 - >警报控制器文本字段? 我可以在警报控制器的文本字段中编辑标签中的预先存在的文本吗? Swift 3,Xcode 8,IOS - Label -> Alert Controller Textfield? Can I edit pre-existing text from a label, in a textfield in an alert controller? Swift 3, Xcode 8, IOS 在文本字段中输入警报而不是键盘->光标停留在文本字段Swift2中 - Alert instead of keyboard for input in textfield --> cursor stays in textfield Swift2 iOS从tableViewCell中的文本字段获取文本值 - ios get text value from textfield in tableViewCell 来自TextField的iOS 9 Swift Segue - iOS 9 Swift Segue from TextField
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM