创建模态提醒窗口(UIAlertView)

UIAlertView类创建一个简单的模态提醒窗口,可能包含消息、按钮以及文本框。模态UI元素要求用户必须与之交互(通常是按下按钮)后才能做其它事情。它们通常位于其他窗口前面,在可见时禁止用户与其他任何界面元素交互。

UIAlertView的初始化代码如下:

- (void)testAlert

{

    UIAlertView *alertView = [[UIAlertView alloc] 

                              initWithTitle:@"系统警告" 

                              message:@"您的电量不足,将在10分钟后关机"

                              delegate:nil

                              cancelButtonTitle:@""

                              otherButtonTitles:nil];

    alertView.alertViewStyle = UIAlertViewStyleDefault;

    [alertView show];

}

调用该方法后,会产生如下界面:

创建模态提醒窗口(UIAlertView)

参数说明:
initWithTitle --- 初始化提醒视图并设置出现在提醒视图顶端的标题。
message --- 详细文本描述
delegate --- 用来响应提醒的对象。如果不需要执行任何操作,可设置为nil
cancelButtonTitle --- 视图中默认按钮的标题
otherButtonTitles --- 视图中额外按钮的标题,是一个数组,以nil结尾

alertView.alertViewStyle用来定义提醒视图的外观,有4种方案可供选择:
UIAlertViewStyleDefault --- 没有设置样式时默认采用的样式,不包含输入文本框
UIAlertViewStylePlainTextInput --- 添加一个常规输入文本框
UIAlertViewStyleSecureTextInput --- 添加一个安全(密码)文本框
UIAlertViewStyleLoginAndPasswordInput --- 添加一个常规文本框和密码文本框

需要着重了解的是delegate这个参数,它指明了由哪个类来响应用户的操作或读取文本框的内容。响应类必须遵守协议UIAlertViewDelegate并实现方法alertView:clickedButtonAtIndex,一般会指定为self。

首先在类的头文件(.h)里声明为遵守UIAlertViewDelegate协议

@interface ViewController : UIViewController <UIAlertViewDelegate>

然后实现方法alertView:clickedButtonAtIndex

- (IBAction)testUIAlertView:(id)sender 

{

    UIAlertView *alertView = [[UIAlertView alloc] 

                             initWithTitle:@"新版本提示" 

                             message:@"该程序有一个新版本,是否升级?" 

                             delegate:self 

                             cancelButtonTitle:@"忽略" 

                             otherButtonTitles:@"现在升级", nil];

    [alertView show];

}

                              

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

{

    NSLog(@"点击按钮的索引是:%d,标题是:%@",buttonIndex,[alertView buttonTitleAtIndex:buttonIndex]);

    if([alertView.title isEqualToString:@"Input your Email"])

    {

        NSLog(@"这个窗口是Email输入提示!");

    }

}

buttonTitleAtIndex方法是根据按钮的索引来取得按钮的标题。假如提醒框里含有输入框,则可以用textFieldAtIndex来获得该TextField实例,例如:

[[alertView textFieldAtIndex:0] text];

也可以自定义一个类来作为UIAlertView实例的delegate,一样的先声明为遵守UIAlertViewDelegate协议,然后将delegate设置为新建类的实例就可以了。但有一点一定要注意,在启用ARC后,实例变量的生存周期只存在于所属方法内部,这里是一个按钮的点击动作,当点击按钮弹出提醒框后,该代理类的引用已经被自动清除掉了,所以当你视图去点击提醒框按钮来触发alertView:clickedButtonAtIndex方法,会出现错误。这里最简单的解决方法是将变量声明为全局变量。下面的例子演示了这个问题:

MyDelegate *delegate;



- (IBAction)testUIAlertView:(id)sender 

{

    //MyDelegate *delegate = [MyDelegate alloc]; //注意,这样写有问题!

    

    delegate = [MyDelegate alloc];

    

    UIAlertView *alertView = [[UIAlertView alloc] 

                             initWithTitle:@"新版本提示" 

                             message:@"该程序有一个新版本,是否升级?" 

                             delegate:delegate 

                             cancelButtonTitle:@"忽略" 

                             otherButtonTitles:@"现在升级", nil];

    [alertView show];

}

你可能感兴趣的:(uialertview)