如何在Swift中添加一个TextField到UIAlertView

我有这个代码,但我不知道如何显示在UIAlertView内的文本字段。

var altMessage = UIAlertController(title: "Warning", message: "This is Alert Message", preferredStyle: UIAlertControllerStyle.Alert) altMessage.addAction(UIAlertAction(title: "Done", style: UIAlertActionStyle.Default, handler: nil)) self.presentViewController(altMessage, animated: true, completion: nil) 

我有这个代码为textfield,我怎么能在UIAlerView中显示这个

 var my:UITextField = UITextField(frame: CGRectMake(0, 0, 10, 10)) 

我也试过这个代码:

 var alert = UIAlertView() alert.title = "Enter Input" alert.addButtonWithTitle("Done") alert.alertViewStyle = UIAlertViewStyle.PlainTextInput alert.addButtonWithTitle("Cancel") alert.show() 

当我指定AlertStyle plainText时,它显示一个带有默认占位符“Login”的TextField ..我想改变它,我想显示一个十进制键盘的键盘。 我也想处理用户input到textField的值。 有人可以帮我弄这个吗?

您可以通过以下方式访问文本框:

 let textField = alert.textFieldAtIndex(0) 

然后更改占位符文本:

 textField.placeholder = "Foo!" 

和键盘types:

 textField.keyboardType = ... 

试试这个代码(与迅速):

 func configurationTextField(textField: UITextField!) { println("configurat hire the TextField") if let tField = textField { self.textField = textField! //Save reference to the UITextField self.textField.text = "Hello world" } } func handleCancel(alertView: UIAlertAction!) { println("User click Cancel button") println(self.textField.text) } var alert = UIAlertController(title: "Alert Title", message: "Alert Message", preferredStyle: UIAlertControllerStyle.Alert) alert.addTextFieldWithConfigurationHandler(configurationTextField) alert.addAction(UIAlertAction(title: "Close", style: UIAlertActionStyle.Cancel, handler:handleCancel)) alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler:{ (UIAlertAction)in println("User click Ok button") println(self.textField.text) })) self.presentViewController(alert, animated: true, completion: { println("completion block") }) 

你能在这里看到我的答案吗?

  var inputTextField: UITextField? //Create the AlertController let actionSheetController: UIAlertController = UIAlertController(title: "Rename", message: "", preferredStyle: .Alert) //Create and add the Cancel action let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel) { action -> Void in //Do some stuff } actionSheetController.addAction(cancelAction) //Create and an option action let nextAction: UIAlertAction = UIAlertAction(title: "OK", style: .Default) { action -> Void in //Do some other stuff } actionSheetController.addAction(nextAction) //Add a text field actionSheetController.addTextFieldWithConfigurationHandler { textField -> Void in // you can use this text field inputTextField = textField } //Present the AlertController self.presentViewController(actionSheetController, animated: true, completion: nil) 

目标C中

  UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Duplicate file" message:@"A file with the same name already exists." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; alertView.alertViewStyle = UIAlertViewStylePlainTextInput; [[alertView textFieldAtIndex:0] setText:@"Filename"]; [[alertView textFieldAtIndex:0] setPlaceholder:@"Enter Filename"]; [alertView show]; 

Swift 2.3中

 func doSomething(){ var alert = UIAlertController(title: "Duplicate file", message: "A file with the same name already exists.", preferredStyle: UIAlertControllerStyle.Alert) alert.addTextFieldWithConfigurationHandler(configurationTextField) alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler:{ (UIAlertAction)in print("User click Ok button") print(self.textField.text) })) self.presentViewController(alert, animated: true, completion: { print("completion block") }) } func configurationTextField(textField: UITextField!){ textField.text = "Filename" } 

Swift 3

 func doSomething(){ var alert = UIAlertController(title: "Duplicate file", message: "A file with the same name already exists.", preferredStyle: UIAlertControllerStyle.alert) alert.addTextField(configurationHandler: configurationTextField) alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler:{ (UIAlertAction)in print("User click Ok button") print(self.textField.text) })) self.present(alert, animated: true, completion: { print("completion block") }) } func configurationTextField(textField: UITextField!){ textField.text = "Filename" } 

Swift 3

  let alert = UIAlertController(title: "Alert Ttitle", message: "Alert Message", preferredStyle: UIAlertControllerStyle.alert) alert.addTextField(configurationHandler: textFieldHandler) alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler:{ (UIAlertAction)in })) self.present(alert, animated: true, completion:nil) 

 func textFieldHandler(textField: UITextField!) { if (textField) != nil { textField.text = "Filename" } } 

更新为swift 3:

使用下面的简单代码:

  func showAlertWithTwoTextFields() { let alertController = UIAlertController(title: "Add Event", message: "Enter event and it's description", preferredStyle: .alert) let saveAction = UIAlertAction(title: "Save", style: .default, handler: { alert -> Void in let eventNameTextField = alertController.textFields![0] as UITextField let descriptionTextField = alertController.textFields![1] as UITextField print("firstName \(String(describing: eventNameTextField.text)), secondName \(String(describing: descriptionTextField.text))") if eventNameTextField.text != "" || descriptionTextField.text != ""{ }else{ // self.showAlertMessageToUser(title: "Alert", messageToUser: "Fields should not be empty, Please enter given info...") // Show Alert Message to User As per you want } }) let cancelAction = UIAlertAction(title: "Cancel", style: .default, handler: { (action : UIAlertAction!) -> Void in }) alertController.addTextField { (textField : UITextField!) -> Void in textField.placeholder = "Enter event Name" } alertController.addTextField { (textField : UITextField!) -> Void in textField.placeholder = "Enter event description in short" } alertController.addAction(saveAction) alertController.addAction(cancelAction) self.present(alertController, animated: true, completion: nil) } 

//享受编码…!

我发现你已经在使用新的UIAlertController – 这是个好主意,因为如果你使用Swift,那么在旧的API中就没什么用处了。 但是alert.textFieldAtIndex:不会为此工作; 它只适用于UIAlertView

幸运的是, UIAlertController有一个添加文本字段的方法 。

Swift 2.2

 import UIKit extension UIAlertController { // MARK: - UIAlertController+Present private struct ButtonsName { static let Ok = NSLocalizedString("uIAlertController.buttonName.ok", comment: "") static let Cancel = NSLocalizedString("uIAlertController.buttonName.cancel", comment: "") } class func suggestionAlertViewWithTitle(title:String?, placeholder:String, message:String, presenter:UIViewController, destructive:Bool = false, okButtonCompletion:((enteredSuggestion:String?)->Void)?, cancelButtonCompletion:(()->Void)?, presentCompletion:(()->Void)?) { var alertTitle = UIAlertController.appName() if let userTitle = title { alertTitle = userTitle } let controller = UIAlertController(title: alertTitle, message: message, preferredStyle: .Alert) let okAction = UIAlertAction(title: ButtonsName.Ok, style: destructive == true ? .Destructive : .Default) { (action) in if let okButtonCompletion = okButtonCompletion { let text = controller.textFields?.first?.text dispatch_async(dispatch_get_main_queue(), { okButtonCompletion(enteredSuggestion: text) }) } } let cancelAction = UIAlertAction(title: ButtonsName.Cancel, style: .Cancel) { (action) in if let cancelButtonCompletion = cancelButtonCompletion { dispatch_async(dispatch_get_main_queue(), { cancelButtonCompletion() }) } } controller.addAction(okAction) controller.addAction(cancelAction) controller.addTextFieldWithConfigurationHandler { (textField) in textField.placeholder = placeholder } dispatch_async(dispatch_get_main_queue(), { presenter.presentViewController(controller, animated: true, completion: presentCompletion) }) } // MARK: - Private private static func appName () -> String { return NSBundle.mainBundle().infoDictionary!["CFBundleName"] as! String } } 

用法:

  UIAlertController.suggestionAlertViewWithTitle(nil, placeholder: placeholder, message: message, presenter: self, destructive: false, okButtonCompletion: { (enteredSuggestion) in self.logger.sendAllLogs(self.currentUser, suggestedTitle: enteredSuggestion) }, cancelButtonCompletion:nil, presentCompletion: nil) 

有点超载,但你总是可以使一些参数可选或/和默认