IOS 警告框 (UIAlertView)的使用方法

时间:2021-07-07 13:38:56

1.普通警告框

IOS的SDK中提供了一个方便的类库UIAlertView,配合着不同参数来使用此类可以做出大多数的警告框,如下代码是IOS最简单的警告框。

  UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"你好" message:@"我是普通警告框" 
delegate:nil cancelButtonTitle:@"好的" otherButtonTitles: nil];
[alert show];

当警告框创建完成后,我们可以在想显示的地方调用show方法。但是,如果在调试过程中跑过这一步会发现,并不是“show”这行代码一跑,我们的警告框就显示出来,而是要继续走完剩余的代码,在当前消息循环结束后,次警告框才会自动弹出。

注:所谓的当前消息循环结束,可以理解为:流程全部跑完,比如函数一直跑,跑到函数尾部返回外面一层函数,再继续跑返回更外面一层当此类推,直到跑到最外面那层的函数的尾部,下一步就出了最外面那层函数,随后程序控制权交给当前消息循环。如果是主线程,则仍然不停循环等候新消息,如果是子线程,则此子线程结束。

对于UIAlertView的界面来说,一般无论点击任何按钮,此警告框就会消失。

如果想知道是按下哪一个按钮的话,需要添加警告框的代理回调方法:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
id alertbutton = [alertView buttonTitleAtIndex:buttonIndex];
NSLog(@"按下了[%@]按钮",alertbutton);
}

通过此代理方法,开发者能明确直到那个警告框的那个按钮被点击了。

最多可以有5个按钮,更多的话界面会有异常情况发生。运行结果如下:IOS 警告框 (UIAlertView)的使用方法

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(, , , );
actIndicator.center = CGPointMake(CGRectGetWidth(alert.bounds)/, 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: 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:];
if(txtField)
{
txtField.placeholder=@"请输入用户名";
txtField.clearButtonMode = UITextFieldViewModeWhileEditing;
} txtField = [alert textFieldAtIndex:];
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;
}

显示效果如下:IOS 警告框 (UIAlertView)的使用方法其根据alert.alertViewStyle不同,显示的也不同