iOS开发之UIAlertController的适配
- 在iOS8中,只能用UIAlertController.而原来的UIAlertView及UIActionSheet已经被抛弃掉了.但是如果一台iOS 7 的手机运行到有UIAlertController的程序后,必定会崩掉.所以一般我们都要对UIAlertController进行适配.
- 不用着急,先看完人家嘛,后面人家已经贴出代码了.就先看完全文呗.
- 本文将介绍UIAlertController中添加一个UIDatePicker的例子
先上图
看完图片的介绍,大概应该能知道做了什么
1.首先应该定义iOS8,以此来判断是ios7还是ios8#define IOS8 [[[UIDevice currentDevice]systemVersion] floatValue] >= 8.0
2.先贴出UIActionSheet的代码
用法将在代码的中加解释,请注意看(写篇文章也是不容易啊)
if (IOS8) {
UIDatePicker *datePicker = [[UIDatePicker alloc] init];
datePicker.datePickerMode = UIDatePickerModeDate;
//解释1,是用于给UIDatePicker留出空间的,因为UIDatePicker的大小是系统定死的,我试过用frame来设置,当然是没有效果的.
//还有就是UIAlertControllerStyleActionSheet是用来设置ActionSheet还是alert的
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"\n\n\n\n\n\n\n\n\n\n\n\n" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
//增加子控件--直接添加到alert的view上面
[alert.view addSubview:datePicker];
//解释2: handler是一个block,当点击ok这个按钮的时候,就会调用handler里面的代码.
UIAlertAction *ok = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init];
//实例化一个NSDateFormatter对象
[dateFormat setDateFormat:@"yyyy-MM-dd"];//设定时间格式
NSString *dateString = [dateFormat stringFromDate:datePicker.date];
//求出当天的时间字符串
NSLog(@"%@",dateString);
}];
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
}];
[alert addAction:ok];//添加按钮
[alert addAction:cancel];//添加按钮
//以modal的形式
[self presentViewController:alert animated:YES completion:^{ }];
}else{
//当在ios7上面运行的时候,
UIDatePicker *datePicker = [[UIDatePicker alloc] init];
datePicker.datePickerMode = UIDatePickerModeDate;
//[datePicker addTarget:self action:@selector(timeChange:) forControlEvents:UIControlEventValueChanged];
datePicker7 = datePicker;
UIActionSheet* startsheet = [[UIActionSheet alloc] initWithTitle:@"\n\n\n\n\n\n\n\n\n\n\n\n"
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:@"确定",
@"取消", nil];
startsheet.tag = 333;
//添加子控件的方式也是直接添加
[startsheet addSubview:datePicker];
[startsheet showInView:self.view];
}
总结区别:
- 在iOS8中,按钮的点击事件都在初始化的时候给设置了.而在ios7中,则要设置代理,
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
以此来判断按的时哪个按钮,每个按钮要做什么事情都要在这里面设置.这无疑iOS8在这点上就更加方便明了,可读性更高一些了. - actionSheet的添加子控件的方式iOS8:[alert.view addSubview:子控件];
ios7: [startsheet addSubview:子控件];虽然方式有点不一样,但是都比较简单,比较爽.
3.UIAlertView的代码
if(IOS8){//如果是iOS8
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"什么鬼" message:@"\n\n" preferredStyle:UIAlertControllerStyleAlert];
//这里就可以设置子控件的frame,但是alert的frame不可以设置
UITextField * text = [[UITextField alloc] initWithFrame:CGRectMake(15, 64, 240, 30)];//wight = 270;
text.borderStyle = UITextBorderStyleRoundedRect;//设置边框的样式
//添加子控件也是直接add,爽
[alert.view addSubview:text];
//这跟 actionSheet有点类似了,因为都是UIAlertController里面的嘛
UIAlertAction *ok = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
NSLog(@"%@",text.text);//控制台中打印出输入的内容
}];
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
}];
//添加按钮
[alert addAction:ok];
[alert addAction:cancel];
//以modal的方式来弹出
[self presentViewController:alert animated:YES completion:^{ }];
}else{//如果是ios7的话
if (customAlertView==nil) {
customAlertView = [[UIAlertView alloc] initWithTitle:@"xixi" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
}
[customAlertView setAlertViewStyle:UIAlertViewStylePlainTextInput];
UITextField *nameField = [customAlertView textFieldAtIndex:0];
nameField.placeholder = @"请输入一个名称";
[customAlertView show];
}
AlertView总结区别:
- iOS8的alertview在中间,而ios7的是偏上一点的.
- iOS8中的alertView可以加其他的控件,但是ios7上面只能加文本输入框(两种,有密码和非密码的输入框)
但是两种方法显然还是有些不一样的.那么如果才能做得一样呢.下面提供一种思路
- 最好就是自定义一个UIView,然后像键盘一样隐藏在最下面,当需要弹框的时候,就直接移上来.如果需要全屏显示,而又有UINavigation的话,就可以modal一个控制器或者在window上加一个UIView
[[UIApplication sharedApplication].keyWindow addSubview:<#(UIView *)view#>] - 这种方式在demo中也是有的,只是做了个大概,有基础的朋友一定明白了的.
如果还有需要请到guihit上下载https://github.com/ouzhenxuan/UIAlertControllers
如果你觉得demo对你有用,请不要手下留情,拼命在guihub上点star(赞)吧.当然简书上也是很欢迎的.
iOS开发之UIAlertController的适配的更多相关文章
- iOS开发之Xcode8兼容适配iOS 10资料整理笔记
1.Notification(通知) 自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到UserN ...
- 李洪强iOS开发之iOS好文章收集
李洪强iOS开发之iOS好文章收集 该文收集朋友们转发或自己的写的技术文章,如果你也有相关的好文章,欢迎留言,当好文章多的时候,我会对这些好文章进行分门别类 文章 简述 日期 直播服务配置 使用 ng ...
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
- iOS开发之UISearchBar初探
iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开 ...
- iOS开发之UIImage等比缩放
iOS开发之UIImage等比缩放 评论功能真不错 评论开通后,果然有很多人吐槽.谢谢大家的支持和关爱,如果有做的不到的地方,还请海涵.毕竟我一个人的力量是有限的,我会尽自己最大的努力大家准备一些干货 ...
- iOS开发之 Xcode6 添加xib文件,去掉storyboard的hello world应用
iOS开发之 Xcode6.1创建仅xib文件,无storyboard的hello world应用 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理 ...
- iOS开发之loadView、viewDidLoad及viewDidUnload的关系
iOS开发之loadView.viewDidLoad及viewDidUnload的关系 iOS开发之loadView.viewDidLoad及viewDidUnload的关系 标题中所说的3个方 ...
- iOS开发之info.pist文件和.pch文件
iOS开发之info.pist文件和.pch文件 如果你是iOS开发初学者,不用过多的关注项目中各个文件的作用.因为iOS开发的学习路线起点不在这里,这些文件只会给你学习带来困扰. 打开一个项目,我们 ...
- iOS开发之WKWebView简单使用
iOS开发之WKWebView简单使用 iOS开发之 WKWebVeiw使用 想用UIWebVeiw做的,但是突然想起来在iOS8中出了一个新的WKWebView,算是UIWebVeiw的升级版. ...
随机推荐
- hive1.2伪分布mysql数据库配置具体解释
hadoop2.6伪分布配置:http://blog.csdn.net/gamer_gyt/article/details/46793731 hive1.2 derby元数据库配置:http://b ...
- [C++设计模式] strategy 策略模式
依照陈硕老师的观点.c++里有面向过程编程.面向对象编程,基于对象编程(面向接口编程)和泛型编程.四种思路都各有其适用场景. 面向过程编程是沿袭C的结构化编程思路,OOP是C++的核心,也是现代高级编 ...
- word2010无法显示endnote x7插件及破解endnote x7
最近本人由于要写文章需要使用endnotex7,相比于mendeley和noteexpress,文献管理和引用我喜欢endnote x7,阅读喜欢mendeley.可是由于之前用的正版30天到期了,破 ...
- iris中间件
最近使用golang写的时候涉及到权限校验,用中间件(使用iris框架内的东西) 自己摸索出一种自己的方式 iris.UseFunc(MiddlewareFunc)使用这个方法,会在所有的请求之前执行 ...
- C#---爬虫抓取系列
以前就尝试过研究了一些爬虫程序,也找过一些爬虫抓取软件,效果不是很好. 今天正好一个培训的网友给了我一个视频,正好研究下,收获颇丰.感谢那位哥们~ 1.首先讨论一下抓取一个页面 这里我写了模仿写了一个 ...
- PHP配置优化:php-fpm配置解读
PHP-FPM是一个PHP FastCGI管理器,php-fpm.conf配置文件用于控制PHP-FPM管理进程的相关参数,比如工作子进程的数量.运行权限.监听端口.慢请求等等. 我们在编译安装PHP ...
- 基于Doxygen的C/C++注释原则
基于Doxygen的C/C++注释原则 标注总述 .文件头标注 . 命名空间标注 . 类.结构.枚举标注 . 函数注释原则 . 变量注释 . 模块标注 . 分组标注 总述 华丽的分隔线 //----- ...
- 顺序容器之vector
最近因为需要,在看C++ primer,哇,感觉这本书真不错,讲的细而且到位,而且大量的练习题,不愧为C++学习的经典书籍.今天看了顺序容器方面的内容,现在汇报一下: 一.什么是vector vect ...
- Linux内核分析笔记
我在MOOC<Linux内核分析>的学习笔记,这里只做个索引! 计算机是如何工作的
- selenim
一.安装selenium Pip install selenium==2.53.1 (稳定版) 下载火狐浏览器35.0.1 http://dl.pconline.com.cn/download ...