【轉】UIAlertView使用小結


轉自: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];
[alert show];
[alert release];

images
     在初始化和show以后對這個UIAlertView不滿的話還能用 
Setting Properties和Configuring Buttons里的方法對它進行修改,當然readonly就沒辦法了。所以一般情況都是初始化時就完全搞定,本來就這么小個東東,改來改去會顯得程序員同志意志不堅定的!
        alertViewStyle這個屬性在iOS5.0以后才有,想加輸入框又要考慮用戶系統版本的不妨去新浪微博官方SDK里面看下它的輸入用戶名和密碼的alterView,反正做中文app的同學基本上都會搞微博分享吧!
behind_alert_view1
       有時候,[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,差不多啦~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM