iOS:提示框(警告框)控制元件UIAlertView的詳解

weixin_34293059發表於2015-09-28

提示框(警告框)控制元件:UIAlertView

 
功能:當點選按鈕或標籤等時,彈出一個提示框,顯示必要的提示,然後通過新增的按鈕完成需要的功能。
 
型別:typedef NS_ENUM(NSInteger, UIAlertViewStyle) {

    UIAlertViewStyleDefault = 0,                 //預設型別

    UIAlertViewStyleSecureTextInput,          //安全密碼的文字框輸入型別

    UIAlertViewStylePlainTextInput,            //普通文字框的文字框輸入型別

    UIAlertViewStyleLoginAndPasswordInput //登陸賬號和密碼輸入型別

   };

屬性:

@property(nonatomic,assign) id <UIAlertViewDelegate> delegate;  //提示框代理
@property(nonatomic,copy) NSString *title;                              //提示框標題
@property(nonatomic,copy) NSString *message;                        // 提示資訊
@property(nonatomic,readonly) NSInteger numberOfButtons;       // 
提示框的按鈕數量
@property(nonatomic) NSInteger cancelButtonIndex;                  // 提示框上被點選的按鈕的索引
@property(nonatomic,readonly) NSInteger firstOtherButtonIndex; // 第一個其他按鈕的索引 
@property(nonatomic,readonly,getter=isVisible) BOOL visible;      // 提示框是否可見
@property(nonatomic,assign) UIAlertViewStyle alertViewStyle ;    // 提示框型別
 
注意:如果按鈕數量超出螢幕顯示範圍,則會建立類似tableView的效果。

物件方法:
 
 初始化提示框
- (instancetype)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id<UIAlertViewDelegate>)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, …);
 
※新增一個按鈕,返回該按鈕的索引值

- (NSInteger)addButtonWithTitle:(NSString *)title; 

※返回指定索引值的提示框標題

- (NSString *)buttonTitleAtIndex:(NSInteger)buttonIndex;

※顯示提示框

-(void)show;

※點選指定的按鈕時提示框消失

- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated;

※設定輸入文字框的索引,返回文字框

- (UITextField *)textFieldAtIndex:(NSInteger)textFieldIndex

 

協議:代理方法

protocol UIAlertViewDelegate <NSObject>

@optional

※點選提示框上的按鈕時觸發的方法

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;

 

※提示框將要消失時觸發的方法

- (void)alertViewCancel:(UIAlertView *)alertView;

 

※提示框將要顯示時觸發的方法

- (void)willPresentAlertView:(UIAlertView *)alertView;  

 

※已經顯示提示框時觸發的方法

- (void)didPresentAlertView:(UIAlertView *)alertView; 

 

※提示框將要消失是觸發的方法

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex;

 

※提示框已經消失時觸發的方法

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex; 

 

※設定提示框的第一個按鈕是否不是取消按鈕

- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView;

@end

 

具體的舉例如下:

首先在檢視控制器檢視中建立按鈕並新增事件,便於完成提示框的建立:

 1 - (void)viewDidLoad {
 2     [super viewDidLoad];
 3     
 4     
 5     //在檢視中新增按鈕事件
 6     UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
 7     
 8     [button setTitle:@"點選" forState:UIControlStateNormal];
 9     
10     [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
11     
12     button.center = self.view.center;
13     
14     //第一種形式:提示框上新增一兩個按鈕的預設型別
15     //[button addTarget:self action:@selector(Clicked_1:) forControlEvents:UIControlEventTouchUpInside];
16     
17     //第二種形式:提示框上新增多個按鈕的預設型別
18     //[button addTarget:self action:@selector(Clicked_2:) forControlEvents:UIControlEventTouchUpInside];
19     
20     //第三種形式:提示框的型別為普通文字框輸入型別
21     //[button addTarget:self action:@selector(Clicked_3:) forControlEvents:UIControlEventTouchUpInside];
22     
23     //第四種形式:提示框的型別為安全文字框輸入型別
24     //[button addTarget:self action:@selector(Clicked_4:) forControlEvents:UIControlEventTouchUpInside];
25     
26     //第五種形式:提示框的型別為登陸賬號和密碼文字框輸入型別
27     [button addTarget:self action:@selector(Clicked_5:) forControlEvents:UIControlEventTouchUpInside];
28     
29     [self.view addSubview:button];
30 }

 

1、第一種形式:提示框上新增一兩個按鈕的預設型別

1 #pragma mark -Clicked1  提示框上新增一兩個按鈕的預設型別
2 -(void)Clicked_1:(UIButton*)sender
3 {
4     //建立提示框物件
5     UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示資訊" message:@"資訊輸入有誤" delegate:self cancelButtonTitle:@"確認" otherButtonTitles:@"取消", nil];
6     
7     //顯示提示框
8     [alertView show];
9 }

演示結果:

 

2、第二種形式:提示框上新增多個按鈕的預設型別

 1 #pragma mark -Clicked2  提示框上新增多個按鈕的預設型別
 2 -(void)Clicked_2:(UIButton*)sender
 3 {
 4     //建立提示框物件
 5     UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示資訊" message:@"多個按鈕" delegate:self cancelButtonTitle:@"button1" otherButtonTitles:@"button2", nil];
 6     
 7     //繼續新增按鈕
 8     [alertView addButtonWithTitle:@"button3"];
 9     [alertView addButtonWithTitle:@"button4"];
10     [alertView addButtonWithTitle:@"button5"];
11     [alertView addButtonWithTitle:@"button6"];
12     [alertView addButtonWithTitle:@"button7"];
13     
14     //顯示提示框
15     [alertView show];
16 }

演示結果:

 

3、第三種形式:提示框的型別為普通文字框輸入型別

 1 #pragma mark -Clicked_3  提示框的型別為普通文字框輸入型別
 2 -(void)Clicked_3:(UIButton*)sender
 3 {
 4     //建立提示框物件
 5     UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示資訊" message:@"請輸入資訊" delegate:self cancelButtonTitle:@"確認" otherButtonTitles:@"取消", nil];
 6     
 7     alertView.alertViewStyle = UIAlertViewStylePlainTextInput;
 8     
 9     //顯示提示框
10     [alertView show];
11 }

演示結果:

 

4、第四種形式:提示框的型別為安全文字框輸入型別

 1 #pragma mark -Clicked_4  提示框的型別為安全文字框輸入型別
 2 -(void)Clicked_4:(UIButton*)sender
 3 {
 4     //建立提示框物件
 5     UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示資訊" message:@"請輸入資訊" delegate:self cancelButtonTitle:@"確認" otherButtonTitles:@"取消", nil];
 6     
 7     alertView.alertViewStyle = UIAlertViewStyleSecureTextInput;
 8     
 9     //顯示提示框
10     [alertView show];
11 }

演示結果:

 

5、第五種形式:提示框的型別為登陸賬號和密碼文字框輸入型別

 1 #pragma mark -Clicked_5  提示框的型別為登陸賬號和密碼文字框輸入型別
 2 -(void)Clicked_5:(UIButton*)sender
 3 {
 4     //建立提示框物件
 5     UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示資訊" message:@"請輸入賬號和密碼" delegate:self cancelButtonTitle:@"確認" otherButtonTitles:@"取消", nil];
 6     
 7     alertView.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;
 8     
 9     //顯示提示框
10     [alertView show];
11 }

演示結果:

 

協議代理的方法的使用:

1、首先實現協議:@interface ViewController ()<UIAlertViewDelegate>

2、其次設定代理,以上面的第一種形式提示框舉例:

 1 #pragma mark -Clicked1  提示框上新增一兩個按鈕的預設型別
 2 -(void)Clicked_1:(UIButton*)sender
 3 {
 4     //建立提示框物件
 5     UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示資訊" message:@"資訊輸入有誤" delegate:self cancelButtonTitle:@"確認" otherButtonTitles:@"取消", nil];
 6     
 7     alertView.delegate = self; //設定代理
 8     
 9     //顯示提示框
10     [alertView show];
11 }

3、實現協議的方法:

 1 #pragma mark -<UIAlertViewDelegate>
 2 //※點選提示框上的按鈕時觸發的方法
 3 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
 4 {
 5     NSLog(@"alertView:clickedButtonAtIndex:");
 6 }
 7 
 8 //※提示框將要消失時觸發的方法
 9 - (void)alertViewCancel:(UIAlertView *)alertView
10 {
11     NSLog(@"alertViewCancel:");
12 }
13 
14 //※提示框將要顯示時觸發的方法
15 - (void)willPresentAlertView:(UIAlertView *)alertView
16 {
17     NSLog(@"willPresentAlertView:");
18 }
19 
20 //※已經顯示提示框時觸發的方法
21 - (void)didPresentAlertView:(UIAlertView *)alertView
22 {
23      NSLog(@"didPresentAlertView:");
24 }
25 
26 //※提示框將要消失是觸發的方法
27 - (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
28 {
29     NSLog(@"alertView: willDismissWithButtonIndex:");
30 }
31 
32 //※提示框已經消失時觸發的方法
33 - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
34 {
35     NSLog(@"alertView: didDismissWithButtonIndex:");
36 }
37 
38 //※設定提示框的第一個按鈕是否不是取消按鈕
39 - (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView
40 {
41     NSLog(@"NO");
42     return NO;
43 }

剛開始時View中的按鈕截圖:               

         

點選"點選"按鈕時,截圖中其他第一個按鈕被設定為不是取消按鈕(按鈕無效)和代理方法執行順序結果:

     

2015-09-28 23:41:30.239 提示框(警告框)UIAlertView[4383:427330] willPresentAlertView:
2015-09-28 23:41:30.240 提示框(警告框)UIAlertView[4383:427330] NO
2015-09-28 23:41:30.763 提示框(警告框)UIAlertView[4383:427330] didPresentAlertView:

點選"確認"時,剩下的代理方法執行順序的結果:

2015-09-28 23:48:27.366 提示框(警告框)UIAlertView[4383:427330] alertView:clickedButtonAtIndex:
2015-09-28 23:48:27.367 提示框(警告框)UIAlertView[4383:427330] alertView: willDismissWithButtonIndex:
2015-09-28 23:48:27.777 提示框(警告框)UIAlertView[4383:427330] alertView: didDismissWithButtonIndex:

 

總的執行結果為:

2015-09-28 23:41:30.239 提示框(警告框)UIAlertView[4383:427330] willPresentAlertView:
2015-09-28 23:41:30.240 提示框(警告框)UIAlertView[4383:427330] NO
2015-09-28 23:41:30.763 提示框(警告框)UIAlertView[4383:427330] didPresentAlertView:
2015-09-28 23:48:27.366 提示框(警告框)UIAlertView[4383:427330] alertView:clickedButtonAtIndex:
2015-09-28 23:48:27.367 提示框(警告框)UIAlertView[4383:427330] alertView: willDismissWithButtonIndex:
2015-09-28 23:48:27.777 提示框(警告框)UIAlertView[4383:427330] alertView: didDismissWithButtonIndex:

 

 

相關文章