我有这段代码,但我不知道如何在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时,它会显示一个带有默认占位符的TextField,“Login”..我想改变它,我想显示一个Decimal Pad键盘。我还想处理用户输入textField的值。有人可以帮我这个吗?
答案 0 :(得分:35)
您可以使用以下方式访问文本字段:
let textField = alert.textFieldAtIndex(0)
然后更改占位符文本:
textField.placeholder = "Foo!"
键盘类型:
textField.keyboardType = ...
答案 1 :(得分:21)
尝试此代码(使用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")
})
你能否看到我的回答here
答案 2 :(得分:15)
在 目标C
中parse.com
在 Swift 2.3
中 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 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"
}
答案 3 :(得分:13)
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)
答案 4 :(得分:11)
在 Swift 3
中var today = new Date();
$scope.date1 = "2016-10-18";
$scope.datearr = $scope.date1.split("-");
var yesterday = new Date($scope.datearr[0],$scope.datearr[1] - 1,$scope.datearr[2]);
today.setHours(0,0,0,0); //----> set time to 0 hours
if(today > yesterday)
console.log("Please select todays date or upcoming date");
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)
答案 5 :(得分:7)
Swift 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)
}
答案 6 :(得分:3)
更新了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)
}
//享受编码......!
答案 7 :(得分:1)
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)
稍微超载,但你总是可以选择一些参数或/和默认
答案 8 :(得分:0)
我发现您已经在使用新的UIAlertController
- 好主意,因为如果您使用Swift,那么在旧API中几乎没有什么用处。但是alert.textFieldAtIndex:
不会为此工作;它只适用于UIAlertView
。
答案 9 :(得分:0)
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)
}
用法:
alertWithTextField(title: "bork", message: "borkborkbork", placeholder: "bork?") { result in
print(result)
}