web-dev-qa-db-ja.com

UIAlertControllerにtextFieldを追加する方法は?

enter image description here

enter image description here

パスワードを変更する機能を実現したい、ユーザーが以前のパスワードを入力する必要があり、アラートダイアログで設計したい、「変更を確認する」ボタンをクリックし、パスワードを変更するために他のView Controllerにジャンプしたい私はいくつかのコードを書きましたが、次の瞬間に書く方法がわかりません。

42
Juice007

複数のテキストフィールドをアラートコントローラーに追加し、アラートコントローラーのtextFieldsプロパティを使用してそれらにアクセスできます。

新しいパスワードが空の文字列である場合、アラートを再度表示します。または、[確認]ボタンを無効にして、テキストフィールドにテキストがある場合にのみ有効にすることもできます。

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];
    }
}];
36
Charmi Gheewala

textFields readonlyプロパティによって、追加されたすべてのテキストフィールドをアラートコントローラーから取得します。これを使用してテキストを取得できます。好む

Swift 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)

注: textField.textはオプションで、使用する前に展開します

目的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];

沿って [[alertController textFields][0] text]この行は、alerControllerに追加された最初のテキストフィールドを取り、そのテキストを取得します。

77
Johnykutty

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)

そして、最初に提示されたときの外観: enter image description here

そして、テキストを受け入れながら:

enter image description here

11
CodeBender