网易彩票项目中的重点和一些操作流记录
父类抽取:
在相似的界面中, 为了不重复造轮子, 可以看到 setting 界面下的各个跳转子控制器都类似, 就是显示的数据不一样, 我们可以把共同的东西抽取到父类, (其实就是数据不一样, 数据的处理也可能不一样, )
存储数据:
有些 cell 的选项是开关类型的, 用户使用开关的状态应该记下来, 没次进入肯定不能是重置啊, 对于开关数据应该存储起来.
cell 的视图中, 对应需要存储的目前有开关类型, 可以在 cell 的类中,
1. 创建 switch 的时候添加监听,
2. 监听方法是当点击事件发生时记录传入 switch 的状态, 保存到用户配置中: NSUserDefualt
3. 设置模型的时候, 是开关类型的就读取配置信息, 把状态设上去
帮助界面
帮助界面有很多条目 cell, 分别对应一个问题, 这个 tableView 的内容应该是从网上获得的, ?? 能不能用一个 json 练习保存数据, 再在 controller 里转换成字典模型, 在转成模型
点进 cell, 出现的是一个网页, 用的是 UIWebView, 只有一个 view, 应该让 self.view = webView, 在 loadView 里
webView 可以想 URL 发出请求, 请求内容, urlRequest, 那么就需要一个 url, 那么在本地的话就要知道这个 url 的全路径, 全路径可以从 bundle 获取, 最后由 webView 加载请求
默认 modal 出来的是不在 nav 框架内的, 所以就没有返回按钮, 在弹出的时候为了能回去, 一般将 view 封装在 navController 里, modal 这个 navC, 再在 topView(view)里拿到导航条设置一个按钮, 监听点击, dismiss 自己
在点击 cell 的时候, 因为默认的 baseC 不是 modal , 有2种方案: 模型设置一个属性判断那种弹出方式, baseC 里选中方法中判断模型这个属性 / 重写选中方法
显然选第二个好, 反正自己继承的 Controller 下的 cell 都是 modal 状态,
果然是 Json 转模型, 在 modal 的界面那里传入模型, 里面就包括有标题和目标网页,
弹出的视图显示页面位置不一样, 像早就滚动在特定的地方是用 js 弄的, 在 OC 中可以执行一些 js 的代码(对 js 代码的调用), js 在做前端比较多
html 中用 js 的window.location.href = "..."; 来做一些网页定位的事, 可以定位 url 资源, 可以定位本页面, 本页面要#id...
webView中有执行 js 代码的方法: stringByEvalua...JavaScriptFromString:@"这里放代码"]; @""里一样可以用拼接方法把需要的 id 传进去
关于-分享
在关于界面有 cell 是有显示联系方式的, 这个可以用 detailLabel 来展示, 在模型中添加一个 detail 属性, 在 cell 中将这个属性赋值给 detailLabel, 将创建 cell 的时候默认创建的是 Value1类型,
cell 上面那一大块是 headereView, 可以用 xib 来弄就好
iOS6iOS7 的适配
在默认情况下, 系统自动帮我们做的一些设置在 iOS6和 iOS7之间不同, 这就导致了在2个系统中 UI 出现不一致的情况, 为了识别性和美观统一, 应该设置一样的 UI, 系统默认设置搞的不一样, 我们就要重新搞过来适配
首先, tableView 的背景颜色不一样, --- 其实是iOS 中自动设置了背景图片, 所以我们在 baseViewC 上设置背景颜色是没用的,
在设置规则图片时, 利用小图片平铺可以生成一个颜色来设置背景色, 同时要 nil 系统背景 View, 才能显示出背景色来, (背景 View > 背景色)
cell 的选中颜色也不一样, 在 cell 一开始初始化时就设置它的选中颜色, (可以将设置 rbga 颜色设置个参数宏)(设置背景 View, selected.view.backGroudColor)
头尾的 cell 是圆角的, -- 系统默认设置 nor 背景, 自己设置一个view 设置到self.back...就好
在 title 和 detalLabel 有背景颜色, 应该去掉, 不然显示不和谐(是背景色, 非背景 view)
cell 的左右有间距, --- 其实系统在设置 cell 的时候自动设置了其 frame, 调用 cell 的 setFrame 方法, 将 frame 自动的传入, cell 的 frame 是 ok 的, 显示有间距是由于 cell.contentView, 自动收缩了,
2方案: 调整 contentView 的 frame, / 加个 cell 的 frame 拉长(可以直接在 setFrame 中设置. 设置 contentView.frame 的话还要在重新获取>设置>赋值回去) 注意:! iOS7中并没有拉伸, 这样统一调整会使得 iOS7变形, 应该加以判断 iOS 版本
分割线: 在初始化 cell 的时候自己定义一条线显示字啊 cell 的下方, 添加到 contentView
注意有辅助视图的话线会显示的短, 因为辅助视图不是 contentView 的一部分, 可以设好子和屏幕一样宽,
在组的最后一行时没有分割线, 可以在能知道最后一行的地方(cellforrow...)判断下, hide 分割线, (需要提供方法/属性给外部)\
iOS7不需要设好子分割线
在那个”上一期真机调试视频”
网络数据抓取
方法有两种
正则表达式
第三方工具(框架)抓取
一般抓去网页的时候都选择用火狐浏览器, 因为有一个插件fireBug, 可以查看网页中指定位置的代码, 还能在弹出的代码块中指向那块代码, 在网页上就会高亮对应的区域
1. 找到需要抓取的数据
2. 提取数据源码(拷贝代码)**抓取下来的数据还要抓取网页中的头尾结构代码来补全**
3. 通过第三方工具抓取需要的数据_JAVA 已经有做有很好的工具和调用代码, 比oc 方便
用 JAVA 的话, 需要用到其他 IDE, eclips 为例: 创建工程, 添加类,
利用三方工具(框架):jsoup. 将 jsoup.java 拖进工程(建议文件夹分类), 相当于在 xcode 中拖入 MBPrgressHub 框架一样, 在 java 中 , 想使用还需要添加到环境中 — 右键 > build Path > add to build path
然后是将从网页上拷贝下来的代码加载进内存
要先获取路径(目前写死吧…): String path = “…” >>> 用三方框架 jsoup 加载网页进来: Jsoup.parse(new File(path), 编码): 返回 document, 保存网页的内容
会碰到点异常: 暂时用 try{ 包起来}可以无警告
网页源码中每个应用的信息都在一个 li 里面, 用三方框架把它抓取出来
将所有 li 抓取: 选中 li, 返回这些 li 到数组: Elements list = doc.select(“li”), 遍历数组, 取出 li 里面保存的各种元素, 一样可以通过.select()来抽取, 获取元素 Element, 转文本的话就是.text()
通过获取对象中的属性键对应的值: .attr(“key”), 图片名, 地址, 描述等
然后是一个非常蛋疼的方法,,,,在 java 中获取信息之后, 用打印来拼接和输出对应的@[ key: value…], 再直接全部拷贝到 oc 的数组中…在 oc 中生成plist 文件….
用 UI 搭建一个简单的应用是可以的, 数据来源就从网上爬下来, 然后看看需要搭建什么结构的应用, 把数据源传进去就可以了
真机调试:
打电话
在需要执行打电话的 cell 的 model 上, 加上 code 代码, 点击后执行代码, 因为是应用间的跳转,
1. 直接获取 Application. open URL 打电话协议: tel://number#简单, 但是打完电话后会停留在电话界面会不来#
2. 另一个协议:telPrompt://number (苹果私有协议, 上架审核会不通过) # 私有协议#
3. 利用 webView 来打开一个 URL, 就和1.的 URL 一样, 但是打开的是modal出来的界面, 可以在挂断电话后回到应用
发短信:
1. 直接打开 URL: sms:// number #不会回到应用#
2. 用 MFMessegeKit(MessageUI/MessageUI.h) 框架, 添加MFMessage,,,控制器, 设置各种信息后 modal 出来
发邮件
1. 直接打开 URL: mailto://address #同上#
2. 同上框架 , MFMail....对象,,,,,MFMail...控制器, 设置各种信息 modal 出来
评分支持
1. 直接用Application 打开 URL: itms-apps:// 应用地址, 可以直接拷贝, 不同的就是 appleid, 这个在将应用提交到苹果后给出的一个 id
应用推荐:
在应用推荐中点击推荐的应用应该跳转到该应用, 可以用 Application 打开URL, 一个应用对应的 URL 是在工程.taget里面设置的,
转盘
难点: 界面的搭建
对于不动的圆盘, 可以直接用 xib 描述, 关键是星座按钮, 需要有旋转的角度:
方法, 设定按钮的锚点为最底部中间, 将位置设为圆盘中心,
在创建 xib 的时候就应该有按钮 — 本来就是界面搭建, xib 不能加的, 在对应的类中加上
在 awakeFromNib 中创建按钮, 设定位置, 图片, 按下图片, 根据第几个图片, 设定角度[累加30℃, n30], 监听按钮点击
按钮的 bounds 应该和图片的大小一样
监听方法里设置按钮选中状态, 并以属性记录, 撤销上一个选中按钮的状态
注意设置圆盘图片可交互, 不然按钮是子控件, 也不可交互了
用 CGImage 来按 rect 切割出各个部分的图片, 注意: CGImage 是像素坐标, 而 UIKit 是点坐标, 所以设置 rect 时需要转换值,
[UIScreen mainScreen].scale 可以知道当前设备的比例(是否 retina 屏), 再对像素进行处理
设置 ImageView 的时候位置不能在想要的地方, 因为按钮本身就是矩形的, 可以用 contentInset 设置内边距把 ImageView 压缩到想要的位置, 或者自定义 Button, 重写 rectForImage…方法, 设定好 ImageView 的位置和大小