iOS8中提示框的使用UIAlertController(UIAlertView和UIActionSheet二合一)
http://www.cocoachina.com/bbs/read.php?tid-333153.html
提示窗口Alert(UIAlertController)和底部弹出窗口AlertASheet的设计
类方法:+alertControllerWithTitle:message:preferredStyle:
style:Alert or AlertSheet
参考:http://blog.csdn.net/liangliang103377/article/details/40078015
一、一个按钮的提示窗设计
UIAlertController *alert=[UIAlertController alertControllerWithTitle:@"My Alert" message:@"This is an alert" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *defaultAction=[UIAlertAction actionWithTitle:@"OK" style:UIAlertStyleDefault handler:^(UIAlertAction *actoin){}];//在代码块中可以填写具体这个按钮执行的操作
[alert addAction:defaultAction]; //代码块前的括号是代码块返回的数据类型
[self presentViewController: alert animated:YES completion:nil];
具体流程就是:创建小界面alert--->创建按钮以及对应动作action--->将按钮添加到界面上addAction--->显示界面presentViewController
同理有:
二、两个按钮的提示窗设计
NSString *title=NSLocalizeString(@"A short title is best!",nil);
NSString *message=NSLocalizeString(@"A message should be a short,complete sentence.",nil);//NSLocalizeString取本地库语言
NSString *cancelButtonTitle=NSLocalizeString(@"Cancel",nil);
NSString *otherButtonTitle=NSLocalizeString(@"OK",nil);
UIAlertController *alertController=[UIAlertController alertControllerWithTitle: title message:message preferredStyle:uiAlertControllerStyleAlert];//创建界面
UIAlertAction *cancelAction=[UIAlertActon actionWithTitle:cancelButtonTitle style:UIAlertStyleDefault handler:^(UIAlertAction *acton){}];//创建按钮cancel以及对应事件
UIAlertAction *otherAction=[UIAlertAction actionWithTitle:otherButtonTitle style:UIAlertStyleDefault handler:^(UIAlertActoin *action){}];//创建按钮ok以及对应事件
//最后将这些按钮都添加到界面上去,显示界面
[alertController addAction:cancelAction];
[alertController addAction:otherAction];
[self presentViewController: alertController animated:YES completion:nil];
三、如果要在alert中添加输入框,可以加上如下代码:
[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField)
{
//在代码块中对文本框进行各种操作,如设置背景或者字体颜色,或是加上监控器,观察文本框输入的变化
//可以实现输入定长的密码,或者是在不输入东西的时候ok按钮不能用等。。。
[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(handleTextFieldTextDidChangeNotification:) name:UITextFieldTextDidChange Notification object:textField];
//如果是输入密码就设置为输入的值不可见
textField.secureTextEntry=YES;
}]
然后就执行其他各种操作。。
当用户输入完毕,点击ok按钮,需要停止监视器:
UIAlertAction *otherAlertAction=[UIAlertAction actionWithTitle:otherButtonTitle style:UIAlertStyleDefault handler:^(UIAction *action)
{
[NSNotificationCenter defaultCenter removeObserver:self name:UITextFieldDidChangeNotification object:alertController.alertController.textFields.firstObject];
}];
五、在没有任何内容输入的时候,禁用ok按钮:
otherAction.enabled=NO;
sefl.secureTextAlertAction=otherAction;//只有在密码框有输入时才启用这个按钮
//这段代码的具体位置见http://blog.csdn.net/liangliang103377/article/details/40078015
六、定义:当输入超过五个字符时,才启用ok键(self.secureTextAlertAction=YES)
-(void)handlerTextFieldTextDidChangeNotification:(NSNotification*) notification
{
UITextField *textField=notification.object;
self.secureTextAlertAction.enabled=textField.text.length>=5;
}
七、关于底部弹起的窗口,大致与Alert的创建一致,只是在类方法 +alertControllerWithTitle:message:preferredStyle:的style中选择为UIAlertControllerStyleAlertSheet
监视文本框,如果一改变textField的值就会调用某个方法:
[UITextField addTarget:self action:@selector(textFieldChanged:) forControlEvents: UIControlEventEditingChanged];
[UITextField addTarget:self action:@selector(textFieldChanged:) forControlEvents: UIControlEventEditingChanged];