iOS-UIAlertController

uialertview在iOS9.0被弃用后,来看看UIAlertController的用法

- (void)showOkayCancelAlert { 
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:UIAlertControllerStyleAlert]; // Create the actions. 
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:cancelButtonTitle style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { NSLog(@"The \"Okay/Cancel\" alert's cancel action occured."); }];
 UIAlertAction *otherAction = [UIAlertAction actionWithTitle:otherButtonTitle style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { NSLog(@"The \"Okay/Cancel\" alert's other action occured."); }]; // Add the actions. [alertController addAction:cancelAction]; 
[alertController addAction:otherAction]; 
[self presentViewController:alertController animated:YES completion:nil]; }

使用起来稍微有些复杂

这是最普通的一个alertcontroller,一个取消按钮,一个确定按钮。

新的alertcontroller,其初始化方法也不一样了,按钮响应方法绑定使用了block方式,有利有弊。需要注意的是不要因为block导致了引用循环,记得使用__weak,尤其是使用到self。

上面的界面如下:

如果UIAlertAction *otherAction这种otherAction多几个的话,它会自动排列成如下:

另外,很多时候,我们需要在alertcontroller中添加一个输入框,例如输入密码:

这时候可以添加如下代码:

[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:UIAlertControllerStyleAlert]; // 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(handleTextFieldTextDidChangeNotification:) name:UITextFieldTextDidChangeNotification object:textField]; 
textField.secureTextEntry = YES; }]; // Create the actions. 
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:cancelButtonTitle style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { NSLog(@"The \"Secure Text Entry\" alert's cancel action occured."); // Stop listening for text changed notifications. 
[[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:alertController.textFields.firstObject]; }]; 
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: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 the enabled/disabled state when the text changed. 
self.secureTextAlertAction = otherAction; // Add the actions. 
[alertController addAction:cancelAction]; 
[alertController addAction:otherAction]; 
[self presentViewController:alertController animated:YES completion:nil]; }

 

 
posted @ 2016-07-26 21:38  tomandhua  阅读(49)  评论(0编辑  收藏  举报