轉自:http://blog.sina.com.cn/s/blog_6647b3b601015u9o.html
參考:http://www.cnblogs.com/xinye/archive/2012/12/23/2830156.html
先甩兩個iOS Developer Library的鏈接,放眼一看就知道這個東東內容灰常少,它的特點就是易學易用,可作為初學入門練習。搞懂以后慢慢學定制界面、增加功能,即使自己不重寫也能看懂大神們寫的SDK,挪為己用。
基本使用流程是這樣的: 初始化一個UIAlertView ——進一步設置——顯示和釋放。“標准語句”↓
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Your Message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
Setting Properties和Configuring Buttons里的方法對它進行修改,當然readonly就沒辦法了。所以一般情況都是初始化時就完全搞定,本來就這么小個東東,改來改去會顯得程序員同志意志不堅定的!
[alert show];
[alert release];
在初始化和show以后對這個UIAlertView不滿的話還能用
alertViewStyle這個屬性在iOS5.0以后才有,想加輸入框又要考慮用戶系統版本的不妨去新浪微博官方SDK里面看下它的輸入用戶名和密碼的alterView,反正做中文app的同學基本上都會搞微博分享吧!
有時候,[alert show]后屏幕會變得好像被lomo化了似地,這個alter就像便秘的大便,很久都不彈出來。那是因為調用的時候沒有在主線程,解決方法是看情況使用
[alert performSelectorOnMainThread:@selector(show)
withObject:nil
waitUntilDone:YES];
或
dispatch_async(dispatch_get_main_queue(), ^{ });
若想讓它自行退散就用這個[alert dismissWithClickedButtonIndex:0 animated:YES];
順便介紹一個簡單的等待提示界面,看完本篇再點開看它,然后可以研究一下簡單的定制界面,然后就應該會用簡潔的MBProgressHUD了,我喜歡,你們也會喜歡的~
通常我們會在用戶按下按鈕后再做點什么,所以就要用到它的delegate。 它的delegate是誰,誰就要在頭文件里加上“UIAlertViewDelegate”。哦,不加也能用,就是Xcode會給你黃色的warning,雖然程序員只care error,不過潔癖點好,加上以后輸入和UIAlertViewDelegate有關的東西會有提示。
大部分情況它的delegate是self吧,幾個UIController之間傳來傳去好亂的~還要記得給它加個tag,免得多個alert在一個controller里面也會亂的。
把任務列一下一一講來:
Responding to Actions
– alertView:clickedButtonAtIndex:
Customizing Behavior
– alertViewShouldEnableFirstOtherButton:
– willPresentAlertView:
– didPresentAlertView:
– alertView:willDismissWithButtonIndex:
– alertView:didDismissWithButtonIndex:
Canceling
– alertViewCancel:
用得最多的就是第一條,用戶按下按鈕后首先進入它,判斷完是哪個View的哪個Button后就可以處理想要處理的任務,常用碼如下:
- (void)alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex
{
switch(alertView.tag)
{
case 1:
if (buttonIndex != [alert cancelButtonIndex]) //默認cancelButtonIndex = 0,每個按鈕index可設
{
;//時間花費短的任務
}
break;
default:
break;
}
}
不要以為它是萬能的,它只適用於處理時長較短任務的情況。因為按鈕被按下后這個alterView就會消失,任務的時間長會讓它繼續懸在屏幕中,等任務完成了才消失。在用戶看來就是死機的樣子。
不想用[self performSelector:@selector(someMethod) withObject:nil afterDelay:x.xx]來取巧的話,– alertView:didDismissWithButtonIndex:就派上用場了,它是在alterView消失之后再進入。怎么用?把上面那個的內容拷過來就可以了。兩者結合更完美。
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
switch(alertView.tag)
{
case 1:
if (buttonIndex != [alert cancelButtonIndex]) //默認cancelButtonIndex = 0,每個按鈕index可設
{
;//時間花費長的任務
}
break;
default:
break;
}
}
上面講到彈不出來,即使在主線程也有可能彈得不流暢——被之后的任務影響了嘛。將之后的任務來個delay是可以解決,但時間不太好掌握,我試了一下0.35秒以上可以。有了delegate之后還有個解決方案就是用– didPresentAlertView:把要做的任務放在里面,意思就是等爺完全展示在你面前再玩別的。嗯,willPresent和didPresent還能修改它的界面,這就是進階用法了,到了那個階段估計最原始的alertView都用不着了吧!
我目前在CamDiary圖片日記里就用到這個階段,其它的還沒研究,總有用處吧,不然蘋果寫出來干嘛捏?千萬不要鄙視它們,它們是用起來最簡單最安全最蘋果的。
學完它,可以繼續學習從屏幕下方立起來的UIActionSheet,差不多啦~