写项目的时候有时候需要在弹出的alert上添加一个输入框
这时候可以添加如下代码:
[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) { // 可以在这里对textfield进行定制,例如改变背景色 textField.backgroundColor = [UIColor orangeColor]; }];
完整的密码输入:
- (void)showSecureTextEntryAlert{ NSString *title = NSLocalizedString(@"A Short Title Is Best", nil); NSString *message = NSLocalizedString(@"A message should be a short, complete sentence.", nil); NSString *cancelButtonTitle = NSLocalizedString(@"Cancel", nil); NSString *otherButtonTitle = NSLocalizedString(@"OK", nil); UIAlertController *alertController = [UIAlertController alertControllerWithTitle :title message:message preferredStyle:UIAlertControllerStyleAl ert]; [alertController addTextFieldWithConfigur ationHandler:^(UITextField *textField) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleTextFieldTextDidCh angeNotification:) name:UITextFieldTextDidChange Notification object:textField]; textField.secureTextEntry = YES; }]; UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:cancelButtonTitle style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { NSLog(@"The \"Secure Text Entry\" alert's cancel action occured."); [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChange Notification object:alertController.textFields.firstObject]; }]; UIAlertAction *otherAction = [UIAlertAction actionWithTitle:otherButtonTitle style:UIAlertActionStyleDefaul t handler:^(UIAlertAction *action) { NSLog(@"The \"Secure Text Entry\" alert's other action occured."); [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChange Notification object:alertController.textFields.firstObject]; }]; // The text field initially has no text in the text field, so we'll disable it. otherAction.enabled = NO; // Hold onto the secure text alert action to toggle the enabled/disabled state when the text changed. self.secureTextAlertAction = otherAction; [alertController addAction:cancelAction]; [alertController addAction:otherAction]; [self presentViewController:alertController animated:YES completion:nil]; }
注意四点:
1.添加通知,监听textfield内容的改变:
// Add the text field for the secure text entry. [alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) { // Listen for changes to the text field's text so that we can toggle the current // action's enabled property based on whether the user has entered a sufficiently // secure entry. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleTextFieldTextDidCh angeNotification:) name:UITextFieldTextDidChange Notification object:textField]; textField.secureTextEntry = YES; }];
2.初始化时候,禁用“ok”按钮:
otherAction.enabled = NO;
self.secureTextAlertAction = otherAction;//定义一个全局变量来存储
3.当输入超过5个字符时候,使self.secureTextAlertAction = YES:
- (void)handleTextFieldTextDidChangeNotification:(NSNotification *)notification { UITextField *textField = notification.object; // Enforce a minimum length of >= 5 characters for secure text alerts. self.secureTextAlertAction.enabled = textField.text.length >= 5; }
4.在“OK”action中去掉通知:
UIAlertAction *otherAction = [UIAlertAction actionWithTitle:otherButtonTitle style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { NSLog(@"The \"Secure Text Entry\" alert's other action occured."); // Stop listening for text changed notifications. [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChange Notification object:alertController.textFields.firstObject]; }];