IOS基礎UI之(五)UIAlertView、UIActionSheet和UIAlertContro

IOS基礎UI之(五)UIAlertView、UIActionSheet和UIAlertController詳解  

標籤: iosUIAlertViewUIActionSheetUIAlertControllerios

2015-09-20 11:58 340人閱讀 評論(3) 收藏 舉報app

 分類:模塊化

IOS(UI基礎)(10) spa

版權聲明:本文爲博主原創文章,未經博主容許不得轉載。.net

     iOS 8的新特性之一就是讓接口更有適應性、更靈活,所以許多視圖控制器的實現方式發生了巨大的變化。好比說Alert Views、Action Sheets。 下面就大體介紹它們的使用方式。代理

    UIAlertView:server

  1.建立UIAlertView。 UIAlertView的按鈕是水平排列的,當按鈕多的時候因爲考慮的位置不夠,所以會垂直排列。對象

參數:delegate: 代理    otherButtonTitles: 其它按鈕,能夠添加多個。多個用逗號隔開blog

[objc] view plaincopy接口

  1. UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"標題" message:@"這個是UIAlertViewStyleDefault的默認樣式" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"登陸",nil ];  


 2.設置對話框樣式。UIAlertView樣式有四種:

UIAlertViewStyleDefault  默認樣式

UIAlertViewStylePlainTextInput  可輸入文本樣式

UIAlertViewStyleSecureTextInput可輸入密碼樣式

UIAlertViewStyleLoginAndPasswordInput 可輸入文本和密碼

[objc] view plaincopy

  1. alert.alertViewStyle = UIAlertViewStyleDefault;  


 3.顯示對話框

[objc] view plaincopy

  1. [alert show];  

效果:



4。 監聽點擊按鈕觸發事件。 

如今咱們要需求是,用戶名和密碼不爲空,登陸按鈕纔可點擊。點擊登錄按鈕控制檯輸入相應的用戶名和密碼。如何實現呢???

實現方法:實現UIAlertViewDelegate協議,調用響應對話框視圖的按鈕動做的回調方法。還有當文本框內容改變時,調用alertViewShouldEnableOtherButton:方法可讓按鈕動態地可用或者不可用。

  4.1 監聽對話框點擊按鈕方法實現控制檯輸出:

[objc] view plaincopy

  1. /** 

  2.  *  alert按鈕監聽事件 

  3.  * 

  4.  *  @param alertView   alertview 

  5.  *  @param buttonIndex 按鈕下標(從0開始) 

  6.  */  

  7. -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{  

  8.     //NSInteger num = [alertView numberOfButtons];//對話框的按鈕個數  

  9.    // NSLog(@"對話框共%ld個按鈕",num);  

  10.     if (buttonIndex == 1) {//登陸按鈕  

  11.         NSString *name = [alertView textFieldAtIndex:0].text//第一個輸入框的值  

  12.         NSString *password = [alertView textFieldAtIndex:1].text;//第二個輸入框的值  

  13.         NSLog(@"用戶名:%@,密碼:%@",name,password);  

  14.     }  

  15. }  

 

  4.2 當文本框內容改變時,調用alertViewShouldEnableOtherButton:方法可讓按鈕動態地可用或者不可用

[objc] view plaincopy

  1. /** 

  2.  *  當提示框的文本框內容改變時觸發 

  3.  * 

  4.  *  @param alertView alertView 

  5.  * 

  6.  *  @return 是否可用 

  7.  */  

  8. -(BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView{  

  9.     BOOL isLogin = NO;  

  10.     NSString *name = [alertView textFieldAtIndex:0].text//第一個輸入框的值  

  11.     NSString *password = [alertView textFieldAtIndex:1].text;//第二個輸入框的值  

  12.     if (name.length!=0 && password.length!=0) {  

  13.        isLogin = YES;  

  14.     }  

  15.     return isLogin;  

  16. }  


                                                          


UIActionSheet

 UIActionSheet是按鈕垂直排列的上拉菜單。 ios8.3以後已經廢棄了。

 NS_CLASS_DEPRECATED_IOS(2_0,8_3,"UIActionSheet is deprecated. Use UIAlertController with a preferredStyle of UIAlertControllerStyleActionSheet instead")

  UIActionSheet使用方式很簡單。

  1.建立UIActionSheet。

按鈕樣式:常規(default)、取消(cancel)以及警示(destruective), 其中警示(destruective)會顯示紅色。

[objc] view plaincopy

  1. UIActionSheet *sheet = [[UIActionSheet alloc]initWithTitle:nil delegate:nil cancelButtonTitle:@"取消" destructiveButtonTitle:@"退出" otherButtonTitles:@"版本更新",@"反饋", nil ];  

  2.顯示對話框

[objc] view plaincopy

  1. [sheet showInView:self.view];  

                              

UIAlertController

 蘋果官方在ios8之後推薦使用UIAlertController。 UIAlertController在功能上是和UIAlertView以及UIActionSheet相同的,UIAlertController以一種模塊化替換的方式來代替UIAlertView和UIActionSheet的功能和做用。是使用對話框(alert)仍是使用上拉菜單(action sheet),就取決於在建立控制器時設置首選樣式的。

  UIAlertControllerStyleActionSheet  --->   UIActionSheet

 UIAlertControllerStyleAlert   ----> UIAlertView

 

 1.建立UIAlertController。 

     注意:UIAlertController無需指定代理,也無需在初始化過程當中指定按鈕

[objc] view plaincopy

  1. UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"標題" message:@"這是默認樣式UIAlertControllerStyleActionSheet" preferredStyle:UIAlertControllerStyleActionSheet];  


2.建立UIAlertAction,將動做按鈕添加到控制器上。UIAlertAction由標題字符串、樣式以及當用戶選中該動做時運行的代碼塊組成。UIAlertActionStyle三種動做樣式:常規(default)、取消(cancel)以及警示(destruective)。

  注意:取消按鈕是惟一的,若是添加了第二個取消按鈕,程序會運行時拋出異常:

* Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘UIAlertController can only have one action with a style of UIAlertActionStyleCancel’

[objc] view plaincopy

  1. UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];  

  2.    UIAlertAction *loginout = [UIAlertAction actionWithTitle:@"退出" style:UIAlertActionStyleDestructive handler:nil];  

  3.    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"反饋" style:UIAlertActionStyleDefault handler:nil];  

  4.    [alert addAction:cancelAction];  

  5.    [alert addAction:loginout];  

  6.    [alert addAction:okAction];  


3.顯示

[objc] view plaincopy

  1. [self presentViewController:alert animated:YES completion:nil];  


                                                          


  以上是UIAlertController實現UIActionSheet(不能實現可輸入)。下面經過UIAlertController實現UIAlertView,效果和上面UIAlertView同樣,可輸入文本和密碼,而且控制按鈕的狀態,控制檯輸入結果。

    1.建立。注意:樣式爲UIAlertControllerStyleAlert

[objc] view plaincopy

  1. UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"登陸窗口" message:@"請填寫登陸信息" preferredStyle:UIAlertControllerStyleAlert];  


   2.建立UIAlertAction,將動做按鈕添加到控制器上

[objc] view plaincopy

  1. UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];  

  2.   

  3.     UIAlertAction *login = [UIAlertAction actionWithTitle:@"登陸" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){  

  4.         NSString *name =  alert.textFields.firstObject.text;  

  5.         NSString *pwd = alert.textFields.lastObject.text;  

  6.         NSLog(@"用戶名:%@,密碼:%@",name,pwd);  

  7.         //點擊登錄按鈕後,銷燬觀察者對象  

  8.         [[NSNotificationCenter defaultCenter]removeObserver:self name:UITextFieldTextDidChangeNotification object:nil];  

  9.     }];  

  10.     login.enabled = NO;//登錄按鈕不可點擊  

  11.     [alert addAction:cancel];  

  12.     [alert addAction:login];  


3.添加可輸入框而且通知觀察者(notification observer)--UITextFieldTextDidChangeNotification,判斷更改按鈕狀態

[objc] view plaincopy

  1. [alert addTextFieldWithConfigurationHandler:^(UITextField *textField){  

  2.         textField.placeholder = @"用戶名";  

  3.         //通知觀察者  

  4.         [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(alertTextFiledDidChange:) name:UITextFieldTextDidChangeNotification object:textField ];  

  5.     }];  

  6.     [alert addTextFieldWithConfigurationHandler:^(UITextField *textField){  

  7.         textField.placeholder = @"密碼";  

  8.         textField.secureTextEntry = YES;  

  9.          //通知觀察者  

  10.         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(alertTextFiledDidChange:) name:UITextFieldTextDidChangeNotification object:textField];  

  11.     }];  


4.接受消息,更改按鈕狀態

[objc] view plaincopy

  1. /** 

  2.  *  觀察者消息方法,更改按鈕的狀態 

  3.  * 

  4.  *  @param notification 消息 

  5.  */  

  6. -(void)alertTextFiledDidChange:(NSNotificationCenter *)notification{  

  7.     UIAlertController *alertController = (UIAlertController *)self.presentedViewController;  

  8.     if(alertController){  

  9.         UIAlertAction *loginAction = alertController.actions.lastObject;  

  10.         NSString *name= alertController.textFields.firstObject.text;  

  11.         NSString *pwd = alertController.textFields.lastObject.text;  

  12.         loginAction.enabled = (name.length!=0 && pwd.length!=0);  

  13.     }  

  14. }  


 5.顯示

[objc] view plaincopy

  1. [self presentViewController:alert animated:YES completion:nil];  


相關文章
相關標籤/搜索