本节主要介绍UITableView和iPad。Demo是从Flicker下载显示图片,但是在实际过程中,发现需要FQ,需要HTTPS连接,所以这个我第一次用了两个demo,一个是课程中的demo,一个是被简化了。***调试过程中,我还发现了Xcode中观察变量的小技巧。1.UITableViewUITableView是iOS中最常用的表格视图。地址簿和电话设置中的每个选项都是表格视图中的一个单元格。微信和微博中的每条记录其实就是一个单元格。只是元素多了而已。(1)两个重要的协议UITableViewDataSource和UITableViewDelegate是UITableView中的两个重要协议(协议可以理解为接口)。前者用于实现对单元格数据源的控制,其中有两个必须实现:指定单元格单元格数量和组数,其他操作如删除、移动等也需要通过实现本协议中的方法来实现。&;&;UITableViewDelegate,这个协议提供了用户与UITableView交互的一系列方法,比如最常用的点击cells的响应方法(2)cells的复用为了节省资源,iOS会复用cells。用于存储从屏幕上移除的单元格的位置。当UITableView向上滑动时,如果队列中有可复用的cell,可以直接取出来使用。需要注意的是,这里的复用有一个限制,就是单元格的样式是一样的。2.iPad专用控件iPad中常用的UI控件有两个,弹窗UIPopoverController和目录-内容组合控件UISplitViewController。本课程介绍后者。UISplitViewController由两个view组成,一个是目录viewmaster,一个是contentviewDetail,Demo使用master中的UITableView显示图片名称,点击后contentviewdetail中加载对应的图片。这里有两点值得注意:(1)根据UISplitViewControllerforiPad的独特控制,直接判断设备是iPhone还是iPad。UISplitViewController的默认值是0是主目录视图,1是详细内容视图。使用UISplitViewController时,如果获取不到contentview,设备为iPhone,反之为iPad。(2)UISplitViewController协议提供了解决屏幕横屏或竖屏时是否显示masterview的方法。需要注意的是,UISplitViewControllerDelegate很特殊,需要在viewDidLoad之前设置。三、Demo流程问题总结Flicker目前被屏蔽,所以需要FQ访问,注册申请APIkey就可以了,验证发现只能通过HTTPS访问,所以将FilckerFetcher中的地址改为HTTPS。下载的数据一直是nil,报错也提示数据为空。检查发现请求HTTPS连接时无法使用。+dataWithContentsOfURL:该方法,因为不能设置安全校验,请求HTTPS连接必须设置安全校验,否则请求失败,无法获取数据。;参考:http://stackoverflow.com/questions/14013307/datawithcontentsofurl-ios-https-self-signed-certificate这里使用NSURLConnection的委托方法让客户端忽略证书验证参考:http://www.cnblogs.com/stan0714/archive/2012/03/21/2409872.html还有其他方法,我没试过。据说这个方法是苹果不允许的,提交申请的时候会有问题。http://stackoverflow.com/questions/19394628/cant-receive-json-request-via-https-due-to-untrusted-certificate遇到的另一个问题是获取图片数据时报错,因为图片不是完全接收,屏幕上显示一小部分图片的现象立即消失。原因是图片只接收到部分数据后立即转换,通知主线程更新UI。其实后续的操作应该等数据接收完之后再做,因为数据可能需要多次。在传输完成之前。同样的问题在后面获取图片列表的json数据时也出现了(正好当时是一次性获取完数据,没注意处理)4.调试提示可以鼠标选择变量或者观察下面的变量,但有时总是不方便,可以在输出窗口输入“po变量名”,观察断点调试时的变量赋值。目前完整版Demo在点击单元格时仍然存在bug。解决后请告诉我原因。如有更新会及时补充。简化的演示下载完整的演示下载
