ios 如何在 Swift 中将 TextField 添加到 UIAlertView
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/24093612/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to add a TextField to UIAlertView in Swift
提问by Apple Kid
I have this code, but I dont know how to show a textfield inside the 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)
I have this code for textfield , how can I show this in UIAlerView
我有这个文本字段的代码,我如何在 UIAlerView 中显示它
var my:UITextField = UITextField(frame: CGRectMake(0, 0, 10, 10))
I also tried this code:
我也试过这个代码:
var alert = UIAlertView()
alert.title = "Enter Input"
alert.addButtonWithTitle("Done")
alert.alertViewStyle = UIAlertViewStyle.PlainTextInput
alert.addButtonWithTitle("Cancel")
alert.show()
When I specify the AlertStyle plainText, it shows a TextField with default placeholder, "Login".. I want to change that, I want to show a Keyboard of Decimal Pad. I also want to handle the value the user enters into the textField. Can someone help me with this?
当我指定 AlertStyle 纯文本时,它会显示一个带有默认占位符“登录”的 TextField。我想改变它,我想显示一个十进制键盘。我还想处理用户输入到 textField 中的值。有人可以帮我弄这个吗?
采纳答案by David Berry
You can access the textfield with:
您可以通过以下方式访问文本字段:
let textField = alert.textFieldAtIndex(0)
Then to change the placeholder text:
然后更改占位符文本:
textField.placeholder = "Foo!"
And the keyboard type:
和键盘类型:
textField.keyboardType = ...
回答by Guy Kahlon
Try This Code (with swift):
试试这个代码(快速):
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")
})
Can you see also my answer here
你能在这里看到我的回答吗
回答by Darshit Shah
In Objective C
在目标 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];
In Swift 2.3
在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"
}
In Swift 3
在斯威夫特 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"
}
回答by Sabareesh
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)
回答by Kobe Yu
In Swift 3
在斯威夫特 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"
}
}
回答by Kavin Varnan
Swift 4:
斯威夫特 4:
var textField: UITextField?
func configurationTextField(textField: UITextField!) {
if (textField) != nil {
self.textField = textField! //Save reference to the UITextField
self.textField?.placeholder = "Some text";
}
}
func openAlertView() {
let alert = UIAlertController(title: "Alert Title", message: "Alert Message", preferredStyle: UIAlertControllerStyle.alert)
alert.addTextField(configurationHandler: configurationTextField)
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler:nil))
alert.addAction(UIAlertAction(title: "Ok", style: .default, handler:{ (UIAlertAction) in
print("User click Ok button")
}))
self.present(alert, animated: true, completion: nil)
}
回答by Jimmy_m
Swift 5
斯威夫特 5
public func alertWithTextField(title: String? = nil, message: String? = nil, placeholder: String? = nil, completion: @escaping ((String) -> Void) = { _ in }) {
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
alert.addTextField() { newTextField in
newTextField.placeholder = placeholder
}
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel) { _ in completion("") })
alert.addAction(UIAlertAction(title: "Ok", style: .default) { action in
if
let textFields = alert.textFields,
let tf = textFields.first,
let result = tf.text
{ completion(result) }
else
{ completion("") }
})
navigationController?.present(alert, animated: true)
}
Usage:
用法:
alertWithTextField(title: "bork", message: "borkborkbork", placeholder: "bork?") { result in
print(result)
}
回答by Kiran jadhav
Updated for swift 3 :
为 swift 3 更新:
used below simple code:
使用下面的简单代码:
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)
}
// Enjoy Coding...!
// 享受编码...!
回答by gbk
Swift 2.2
斯威夫特 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
}
}
usage:
用法:
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)
a little bit overloaded, but u can always make some parameters optional or/and default
有点重载,但你总是可以让一些参数可选或/和默认
回答by rickster
I see you're already using the new UIAlertController
-- good idea, since there's little use in old API if you're usung Swift anyway. But alert.textFieldAtIndex:
won't work for that; it's for UIAlertView
only.
我看到您已经在使用新的 UIAlertController
-- 好主意,因为如果您无论如何都使用 Swift,那么旧的 API 几乎没有用处。但alert.textFieldAtIndex:
不会为此工作;只是为了UIAlertView
。
Luckily, UIAlertController
has a method for adding text fields.