一句話顯示提醒框
[[[UIAlertView alloc] initWithTitle:@"這是提示框的标題" message:@"這是提示框要顯示的資訊" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消", nil] show];
效果如下
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN0LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX90TUOJTTU9EMJRkT4FEVkZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TOwIDO0MzMyIzNyMDM1EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
如上圖所示,init方法中的參數各有對應。這裡需要注意的是,參數中的cancelButtonTitle并不一定要寫"取消",随需求所定。其實這句話涉及三個方法,alloc、initWith.... 、show
是以,可以先定義一個UIAlertView對象,再show也是可以的,後面會有代碼。
另外,OtherButtonTitles對應的參數個數是不定的,就行NSLog中制定的參數不定一樣,是以後面還可以加@"其他按鈕",用逗号隔開,就像這樣
[[[UIAlertView alloc] initWithTitle:@"這是提示框的标題" message:@"這是提示框要顯示的資訊" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消", @"其他按鈕",nil] show];
效果如下
UIAlertView預設超過三個按鈕,就會如上圖所示,變成縱向增加按鈕
設定UIAlertView樣式
代碼如下
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"這是提示框的标題" message:@"這是提示框要顯示的資訊" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消", nil];
[alert setAlertViewStyle:UIAlertViewStyleDefault];
[alert show];
調用SetAlertViewStyle:方法就可以設定其樣式,其參數是一個枚舉,定義如下
UIAlertViewStyleDefault是預設樣式,相當于沒有指定樣式。
UIAlertViewStyleSecureTextInput是密碼輸入框,效果如下
UIAlertViewStylePlainTextInput是普通文本輸入框,效果如下
UIAlertViewStyleLoginAndPasswordInput顧名思義,就是文本框和密碼框一起出現,一般用于使用者名和密碼
文本裡面的提示也寫得很清楚,第一個輸使用者名,第二個是密碼
代理方法
一個比較實際的問題,就是要在按鈕點選之後做些事情,這時就需要代理方法。
不過在此之前,需要讓UIAlertView的代理遵守UIAlertViewDelegate協定:
還記得那個initWith...方法裡面的delegate嗎?那個就是指定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的方式擷取,文檔中已寫明
效果如下
不過有一個代理方法需要注意
文檔中已經寫明,這個方法不會在點選cancel按鈕的時候調用,是在取消view的時候調用(比如使用者按home鍵的時候),不過我試了下,就算是按home鍵也不會調用,望知道原因的指教。
還有一個代理方法可以監聽按鈕點選事件
這個代理方法同樣可以監聽點選事件,與前面ClickedButtonAtIndex的不同之處在于調用時機不同。可以用列印測試一下,前者在點選之後立即列印,而後者是在view伴随着動畫效果消失後再調用的。