天天看點

IOS開發基礎篇之UIAlertView的使用

一句話顯示提醒框

[[[UIAlertView alloc] initWithTitle:@"這是提示框的标題" message:@"這是提示框要顯示的資訊" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消", nil] show];
           

效果如下

IOS開發基礎篇之UIAlertView的使用

如上圖所示,init方法中的參數各有對應。這裡需要注意的是,參數中的cancelButtonTitle并不一定要寫"取消",随需求所定。其實這句話涉及三個方法,alloc、initWith.... 、show

是以,可以先定義一個UIAlertView對象,再show也是可以的,後面會有代碼。

另外,OtherButtonTitles對應的參數個數是不定的,就行NSLog中制定的參數不定一樣,是以後面還可以加@"其他按鈕",用逗号隔開,就像這樣

[[[UIAlertView alloc] initWithTitle:@"這是提示框的标題" message:@"這是提示框要顯示的資訊" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消", @"其他按鈕",nil] show];
           

效果如下

IOS開發基礎篇之UIAlertView的使用

UIAlertView預設超過三個按鈕,就會如上圖所示,變成縱向增加按鈕

設定UIAlertView樣式

代碼如下

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"這是提示框的标題" message:@"這是提示框要顯示的資訊" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消", nil];
    [alert setAlertViewStyle:UIAlertViewStyleDefault];
    [alert show];
           

調用SetAlertViewStyle:方法就可以設定其樣式,其參數是一個枚舉,定義如下

IOS開發基礎篇之UIAlertView的使用

UIAlertViewStyleDefault是預設樣式,相當于沒有指定樣式。

UIAlertViewStyleSecureTextInput是密碼輸入框,效果如下

IOS開發基礎篇之UIAlertView的使用

UIAlertViewStylePlainTextInput是普通文本輸入框,效果如下

IOS開發基礎篇之UIAlertView的使用

UIAlertViewStyleLoginAndPasswordInput顧名思義,就是文本框和密碼框一起出現,一般用于使用者名和密碼

IOS開發基礎篇之UIAlertView的使用

文本裡面的提示也寫得很清楚,第一個輸使用者名,第二個是密碼

代理方法

一個比較實際的問題,就是要在按鈕點選之後做些事情,這時就需要代理方法。

不過在此之前,需要讓UIAlertView的代理遵守UIAlertViewDelegate協定:

還記得那個initWith...方法裡面的delegate嗎?那個就是指定UIAlertView的代理。

下面是一些代理方法

監聽按鈕點選事件代理

IOS開發基礎篇之UIAlertView的使用

文檔中寫得很清楚,當View中的一個按鈕點選的時候點選,這個方法結束後,view會自動消失。

這個方法中,後面的buttonIndex就表示點選按鈕的索引,這個索引從0開始,不是按照顯示的順序計算的,是按照initWith...方法中的若幹按鈕title書寫順序計算的

可以列印出來看看效果

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSLog(@"點選了第%d個按鈕",buttonIndex);
}
           

在這個方法裡面,可以處理使用者的點選事件

如何擷取輸入框中的内容呢?這個不是用代理方法,而是直接擷取,接着在上面的代理方法寫

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSLog(@"點選了第%d個按鈕",buttonIndex);
    UITextField *textField1 = [alertView textFieldAtIndex:0];
    UITextField *textField2 = [alertView textFieldAtIndex:1];
    NSLog(@"使用者名 : %@,密碼 : %@",textField1.text,textField2.text);
}
           

先通過傳進來的alertView擷取其中的textField,在擷取textField中的text,這裡同樣采取index的方式擷取,文檔中已寫明

IOS開發基礎篇之UIAlertView的使用

效果如下

IOS開發基礎篇之UIAlertView的使用

不過有一個代理方法需要注意

IOS開發基礎篇之UIAlertView的使用

文檔中已經寫明,這個方法不會在點選cancel按鈕的時候調用,是在取消view的時候調用(比如使用者按home鍵的時候),不過我試了下,就算是按home鍵也不會調用,望知道原因的指教。

還有一個代理方法可以監聽按鈕點選事件

IOS開發基礎篇之UIAlertView的使用

這個代理方法同樣可以監聽點選事件,與前面ClickedButtonAtIndex的不同之處在于調用時機不同。可以用列印測試一下,前者在點選之後立即列印,而後者是在view伴随着動畫效果消失後再調用的。

繼續閱讀