这是最普通的一个alertcontroller,一个取消按钮,一个确定按钮。
新的alertcontroller,其初始化方法也不一样了,按钮响应方法绑定使用了block方式,有利有弊。需要注意的是不要因为block导致了引用循环,记得使用__weak,尤其是使用到self。
上面的界面如下:
如果UIAlertAction *otherAction这种otherAction多几个的话,它会自动排列成如下:
另外,很多时候,我们需要在alertcontroller中添加一个输入框,例如输入密码:
这时候可以添加如下代码:
[alertControlleraddTextFieldWithConfigurationHandler:^(UITextField *textField) {
// 可以在这里对textfield进行定制,例如改变背景色
textField.backgroundColor =[UIColor orangeColor];
}];
而改变背景色会这样:
完整的密码输入:
- (void)showSecureTextEntryAlert {
NSString *title = NSLocalizedString(@"A Short Title Is Best", nil);
NSString *message =NSLocalizedString(@"A message should bea short, complete sentence.",nil);
NSString *cancelButtonTitle =NSLocalizedString(@"Cancel", nil);
NSString *otherButtonTitle =NSLocalizedString(@"OK", nil);
UIAlertController *alertController = [UIAlertControlleralertControllerWithTitle:title message:messagepreferredStyle:UIAlertControllerStyleAlert];
// Add the text field for the secure text entry.
[alertControlleraddTextFieldWithConfigurationHandler:^(UITextField *textField) {
// Listen for changes to the text field's text so that wecan toggle the current
// action's enabled propertybased on whether the user has entered a sufficiently
// secure entry.
[[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(handleTextFieldTextDidChangeNotification:)name:UITextFieldTextDidChangeNotification object:textField];
textField.secureTextEntry= YES;
}];
// Create the actions.
UIAlertAction *cancelAction =[UIAlertAction actionWithTitle:cancelButtonTitle style:UIAlertActionStyleCancelhandler:^(UIAlertAction *action) {
NSLog(@"The \"SecureText Entry\" alert's cancel actionoccured.");
// Stop listening for text changed notifications.
[[NSNotificationCenterdefaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:alertController.textFields.firstObject];
}];
UIAlertAction *otherAction = [UIAlertActionactionWithTitle:otherButtonTitle style:UIAlertActionStyleDefaulthandler:^(UIAlertAction *action) {
NSLog(@"The \"SecureText Entry\" alert's other actionoccured.");
// Stop listening for text changed notifications.
[[NSNotificationCenterdefaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification 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 theenabled/disabled state when the text changed.
self.secureTextAlertAction =otherAction;
// Add the actions.
[alertControlleraddAction:cancelAction];
[alertControlleraddAction:otherAction];
[self presentViewController:alertControlleranimated:YES completion:nil];
}
注意四点:
1.添加通知,监听textfield内容的改变:
// Add the text field for the secure text entry.
[alertControlleraddTextFieldWithConfigurationHandler:^(UITextField *textField) {
// Listen for changes to the text field's text so that wecan toggle the current
// action's enabled propertybased on whether the user has entered a sufficiently
// secure entry.
[[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(handleTextFieldTextDidChangeNotification:)name:UITextFieldTextDidChangeNotification 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 forsecure text alerts.
self.secureTextAlertAction.enabled =textField.text.length >= 5;
}
4.在“OK”action中去掉通知:
UIAlertAction *otherAction = [UIAlertActionactionWithTitle:otherButtonTitle style:UIAlertActionStyleDefaulthandler:^(UIAlertAction *action) {
NSLog(@"The \"SecureText Entry\" alert's other actionoccured.");
// Stop listening for text changed notifications.
[[NSNotificationCenterdefaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:alertController.textFields.firstObject];
}];
最后是以前经常是alertview与actionsheet结合使用,这里同样也有:
- (void)showOkayCancelActionSheet {
NSString *cancelButtonTitle =NSLocalizedString(@"Cancel", nil);
NSString *destructiveButtonTitle =NSLocalizedString(@"OK", nil);
UIAlertController *alertController =[UIAlertController alertControllerWithTitle:nil message:nilpreferredStyle:UIAlertControllerStyleActionSheet];
// Create the actions.
UIAlertAction *cancelAction =[UIAlertAction actionWithTitle:cancelButtonTitle style:UIAlertActionStyleCancelhandler:^(UIAlertAction *action) {
NSLog(@"The \"Okay/Cancel\" alert action sheet's cancel action occured.");
}];
UIAlertAction *destructiveAction =[UIAlertAction actionWithTitle:destructiveButtonTitle style:UIAlertActionStyleDestructivehandler:^(UIAlertAction *action) {
NSLog(@"The \"Okay/Cancel\" alert action sheet's destructive actionoccured.");
}];
// Add the actions.
[alertControlleraddAction:cancelAction];
[alertControlleraddAction:destructiveAction];
[self presentViewController:alertControlleranimated:YES completion:nil];
}
在底部显示如下:
好了,至此,基本就知道这个新的controller到底是怎样使用了。