一句话显示提醒框
[[[UIAlertView alloc] initWithTitle:@"这是提示框的标题" message:@"这是提示框要显示的信息" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消", nil] show];
效果如下
如上图所示,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伴随着动画效果消失后再调用的。