如何在UIAlertController中添加textField?

[英]How to add textField in UIAlertController?


enter image description here

enter image description here

I want to realize a function about changing password,it requires user to input his previous password,and I design it in a alert dialog,I want to click the button "Confirm the modification" then jump to the other view controller for changing password.I have written some code,but I don't know how to write in the next moment.

我想实现一个关于更改密码的功能,它要求用户输入他以前的密码,我在一个警告对话框中设计它,我想点击“确认修改”按钮,然后跳转到另一个视图控制器更改密码。我写了一些代码,但我不知道下一刻该如何写。

3 个解决方案

#1


26  

You can add multiple textfields to alert controller and access them with alert controller's textFields property

您可以向警报控制器添加多个文本字段,并使用警报控制器的textFields属性访问它们

If new password is empty string, present the alert again. Or another way.. first disable Confirm button, enable it only when text field has text

如果新密码为空字符串,则再次显示警报。或者另一种方式..首先禁用“确认”按钮,仅在文本字段包含文本时启用它

UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"confirm the modification" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
    UITextField *password = alertController.textFields.firstObject;
    if (![password.text isEqualToString:@""]) {

        //change password

    }
    else{
        [self presentViewController:alertController animated:YES completion:nil];
    }
}];

#2


44  

You will get all added textfields from alert controller by its textFields readonly property, you can use it to get its text. Like

您将通过其textFields readonly属性从警报控制器获取所有添加的文本字段,您可以使用它来获取其文本。喜欢

Swift 4:

斯威夫特4:

let alertController = UIAlertController(title: "", message: "", preferredStyle: .alert)
alertController.addTextField { textField in
    textField.placeholder = "Password"
    textField.isSecureTextEntry = true
}
let confirmAction = UIAlertAction(title: "OK", style: .default) { [weak alertController] _ in
    guard let alertController = alertController, let textField = alertController.textFields?.first else { return }
    print("Current password \(String(describing: textField.text))")
    //compare the current password and do action here
}
alertController.addAction(confirmAction)
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
alertController.addAction(cancelAction)
present(alertController, animated: true, completion: nil)

Note: textField.text is optional, unwrap it before using

注意:textField.text是可选的,在使用之前将其解包

Objective-C:

Objective-C的:

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleAlert];
[alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
    textField.placeholder = @"Current password";
    textField.secureTextEntry = YES;
}];
UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    NSLog(@"Current password %@", [[alertController textFields][0] text]);
    //compare the current password and do action here

}];
[alertController addAction:confirmAction];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
    NSLog(@"Canelled");
}];
[alertController addAction:cancelAction];
[self presentViewController:alertController animated:YES completion:nil];

By [[alertController textFields][0] text] this line, it will take first textfield added to the alerController and get its text.

通过[[alertController textFields] [0] text]这一行,它将第一个文本字段添加到alerController并获取其文本。

#3


10  

Here is an updated answer for Swift 4.0 that creates the desired kind of textfield:

以下是Swift 4.0的更新答案,它创建了所需的文本字段:

// Create a standard UIAlertController
let alertController = UIAlertController(title: "Password Entry", message: "", preferredStyle: .alert)

// Add a textField to your controller, with a placeholder value & secure entry enabled
alertController.addTextField { textField in
    textField.placeholder = "Enter password"
    textField.isSecureTextEntry = true
    textField.textAlignment = .center
}

// A cancel action
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { _ in
    print("Canelled")
}

// This action handles your confirmation action
let confirmAction = UIAlertAction(title: "OK", style: .default) { _ in
    print("Current password value: \(alertController.textFields?.first?.text ?? "None")")
}

// Add the actions, the order here does not matter
alertController.addAction(cancelAction)
alertController.addAction(confirmAction)

// Present to user
present(alertController, animated: true, completion: nil)

And how it looks when first presented: enter image description here

它首次呈现时的外观如何:

And while accepting text:

在接受文字的同时:

enter image description here

智能推荐

注意!

本站翻译的文章,版权归属于本站,未经许可禁止转摘,转摘请注明本文地址:http://www.silva-art.net/blog/2015/12/29/7522f4b2a2d47dab01d2445dc4c573b6.html



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告