本文续:iOS开发 - 第02篇 - UI进阶 - 14 - 彩票(第一天) iOS开发 - 第02篇 - UI进阶 - 15 - 彩票(第二天)
1、帮助
1.1 界面
1.2 实现思路
1> 自定义帮助控制器(ILHelpViewController,和之前设置界面的一样,配置模型即可)
2> 解析json数据,把字典转换为模型,展示帮助界面
3> 点击Cell,跳转到控制器,加载不同的网页
4> 自定义网页控制器(ILHtmlViewController),加载网页
注1:应该点击Cell跳转到网页控制器,这里用Modal,默认是push,重写didSelectRowAtIndexPath,用Modal
注2:Modal出的是导航控制器,用自己的导航控制器包装下,保证一个程序就一个导航控制器
注3:添加导航条左上角的取消按钮,点击取消,dismissViewController,返回帮助控制器
5> 用UIWebView加载网页(直接让控制器的View为UIWebView),网页在资源包里,通过资源包获取url,加载网页
[[NSBundle mainBundle]URLForResource:@"bjdc_howto.html" withExtension:nil];
6> 应该是点击不同的Cell,跳转到不同的网页,给网页控制器添加html模型,每一个Cell对应一个html模型,取出对应的html模型,把html模型传给网页控制器
注1:点击如何领奖这类Cell,应该跳到对应的标题,使用javascript语言搞定,javascript是解析型语言,解析一行执行一行,OC是编译性语言,全部没错才能运行
注2:如何跳到对应的标题,需要根据id去跳转
注3:window.location.href ="#howtorecharge" (#id就能跳转到对应的标题)
注4:加载不同的Cell,跳到对应的标题,需要执行javascript代码,应该是网页加载完毕的时候调用,监听webView加载,用代理执行javascript代码stringByEvaluatingJavaScriptFromString
2、分享 & 关于
2.1 界面
2.2 实现思路
1> 分享界面直接配置模型
2> 关于界面需要添加一个头部视图,用XIB描述
3> 关于界面的Cell多了一个子标题,改Cell的样式为value1,就会把子标题出现在右边
4> 界面根据模型显示,给父类Item添加一个subTitle属性(Cell是根据模型去显示)
3、iOS6和iOS7适配 --- 了解
1> tableView的背景图片
2> Cell的选中颜色
3> Cell默认不需要圆角,重新设置Cell的背景View,因为系统自带Cell的背景view是圆角的
4> 清空Cell子控件的背景颜色,默认label的背景为白色
5> iOS6中Cell不需要间距,改变Cell的frame,本质调用setFrame,重写setFrame
frame.origin.x -= 10;
frame.size.width += 20;
注:怎么知道是10,打印下contentView的frame就知道了
6> 分割线,第一行不需要分割线,传入indexPath,判断是否是第一行,只有在返回每一行Cell的方法中才能拿到Cell给他设置indexPath
7> 每一组的间距
设置sectionHeaderHeight:20
iOS7注意,第一个Cell的y从35开始,打印下就知道了
iOS7的顶部额外滚动区域contentInset.top是在原来的基础上增加64,不是直接把原来的contentInset.top覆盖,在viewDidLoad测试下就知道了,设置为64,整个tableView从左上角开始显示了,如果是覆盖,在viewDidLoad设置没有效果
iOS7怎么保证每组间距一样,减小顶部额外滚动区域设置为-15就保证第一组间距为20,目的让内容往上移动一点
4、真机调试
Xcode7之前需要证书,麻烦,步骤如下:Xcode7之前真机调试(证书)
Xcode7之后免证书调试,步骤如下:Xcode7免证书调试
1> 应用评分
2> 打电话
3> 短信分享
问题:联系人那会黑屏
原因:导航条的主题导致的,我们是不是拿到所有的导航条设置背景图片了,短信控制器也有导航条,他会跟我们自己的冲突,就会导致黑屏
解决:修改我们自己导航控制器的导航条,用appearanceWhenContainedIn,就不会影响短信控制器的导航条了
[A类 appearance]: 获取整个程序中A类的外观
[A类appearanceWhenContainedIn:B类, nil]:获取B类中A类的外观
4> 邮件分享
5> 跳转应用
如果安装了这个应用,就直接打开,没有安装,去appstory下载
url:协议头://路径
schemes:协议头 identifier:路径
openUrl跳转到对应的应用
canOpenURL是否能打开这个应用
5、block循环引用 --- 重要
block会把里面的对象强引用,可能会导致循环引用
解决办法:告诉block不要强引用里面的对象,在block里面用的指针,改成弱指针就好了
__weak typeof(self) selfVc = self; typeof()自动识别里面的类型
如果直接用_下划线访问成员属性,相当于self->,也会造成循环引用,block里面访问成员属性最好用点语法