【转】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,差不多啦~

posted @ 2013-01-24 22:45  ygm900  阅读(3122)  评论(0编辑  收藏  举报