IOS 警告框 (UIAlertView)的使用方法
1.普通警告框
IOS的SDK中提供了一个方便的类库UIAlertView,配合着不同参数来使用此类可以做出大多数的警告框,如下代码是IOS最简单的警告框。
1 UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"你好" message:@"我是普通警告框"
delegate:nil cancelButtonTitle:@"好的" otherButtonTitles: nil]; 2 [alert show];
当警告框创建完成后,我们可以在想显示的地方调用show方法。但是,如果在调试过程中跑过这一步会发现,并不是“show”这行代码一跑,我们的警告框就显示出来,而是要继续走完剩余的代码,在当前消息循环结束后,次警告框才会自动弹出。
注:所谓的当前消息循环结束,可以理解为:流程全部跑完,比如函数一直跑,跑到函数尾部返回外面一层函数,再继续跑返回更外面一层当此类推,直到跑到最外面那层的函数的尾部,下一步就出了最外面那层函数,随后程序控制权交给当前消息循环。如果是主线程,则仍然不停循环等候新消息,如果是子线程,则此子线程结束。
对于UIAlertView的界面来说,一般无论点击任何按钮,此警告框就会消失。
如果想知道是按下哪一个按钮的话,需要添加警告框的代理回调方法:
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { id alertbutton = [alertView buttonTitleAtIndex:buttonIndex]; NSLog(@"按下了[%@]按钮",alertbutton); }
通过此代理方法,开发者能明确直到那个警告框的那个按钮被点击了。
最多可以有5个按钮,更多的话界面会有异常情况发生。运行结果如下:
2.无按钮警告框
利用警告框的模态特性,来模拟一些屏蔽用户操作的现象。
我们下面做一个警告框,在上面去掉所有元素,增加一个转动的进度圈来表明任务正在执行,这样就能达到我们的目的了,代码如下。
-(void)showNoButtonAlert { UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"请稍等" message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:nil]; [alert show]; alert.backgroundColor = [UIColor blackColor]; //无敌风火轮 UIActivityIndicatorView *actIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; //CGRect alertbounds=alert.bounds; //位置设置好 actIndicator.frame=CGRectMake(0, 0, 30, 30); actIndicator.center = CGPointMake(CGRectGetWidth(alert.bounds)/2, CGRectGetHeight(alert.bounds)-40.0f); //动起来 [actIndicator startAnimating]; [alert addSubview:actIndicator]; //过三秒消失 [self performSelector:@selector(dismissAlert:) withObject:alert afterDelay:3.0f]; } -(void)dismissAlert:(UIAlertView *)aAlertView { if(aAlertView) { //警告框消失 [aAlertView dismissWithClickedButtonIndex:0 animated:YES]; } }
3.显示文本输入框的警告框(登陆框)
在警告框上显示一个文本输入框表明用户的输入区域,文本框下面则是提供两个按钮:确认和取消。具体代码如下:
-(void)showTextInputAlert { UITextField *txtField=nil; UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"你好" message:@"请输入新题目:\n\n\n\n" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; alert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput; //显示之前配置txtField txtField = [alert textFieldAtIndex:0]; if(txtField) { txtField.placeholder=@"请输入用户名"; txtField.clearButtonMode = UITextFieldViewModeWhileEditing; } txtField = [alert textFieldAtIndex:1]; if(txtField) { txtField.placeholder =@"请输入密码"; txtField.clearButtonMode = UITextFieldViewModeWhileEditing; } //alert.tag=kalertTextInputType; [alert show]; NSLog(@"%@",txtField.text); } -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { id clickButton=[alertView buttonTitleAtIndex:buttonIndex]; NSLog(@"按下了%@按钮",clickButton); id tmp=nil; }
显示效果如下:其根据alert.alertViewStyle不同,显示的也不同