ios实战开发之仿新浪微博(第十讲:微博功能完善二)

1、效果演示

2、更新说明
2.1、增加点击微博显示详细信息
2.2、优化微博展示功能
2.3、增加各按钮点击事件(演示事件)

3、设计说明
3.1 点击某条微博,进入该微博的详细信息,通过新窗口展示
3.1.1 该新窗口通过监听微博的点击事件触发,新窗口为导航控制器的子控制器,将首页控制器弹出
3.1.1.1 首页控制器下面有主管理器的Dock栏,而新窗口不需要该导航条,因此在新窗口进入主屏幕时需要完成去掉Dock栏并调节新窗口高度;
3.1.1.2 导航控制器有两个代理方法,分别在新控制器即将进入主屏幕及完全进入主屏幕时调用;
3.1.1.3 实现这两个方法,即将进入主屏幕时将Dock栏从主管理器上撤出,调整Dock的位置并加到Home控制器(导航控制器的根控制器)上,视觉上Dock栏与根控制器一起并推出;
3.1.1.4 在切回根控制器时,实现第二个方法,让根控制器即回到主屏幕时(即完全进入主屏幕)后将Dock归还给主管理器并调整Dock位置,视觉上Dock栏与根控制器一起并退回;
3.2 微博详细信息界面设计
3.2.1 详细页面的内容除了首页展示的微博信息外,附加该微博的转发详细信息与评论详细信息以及点赞数
3.2.2 两者对比图:
12
3.2.3 由于两者相似性很高,因此抽取出一个用来描述该对象的父类,将其共性在父类中实现,特性各自实现
3.2.4 该对象为微博数据对象,微博对象包括数据模型(M)与展示视图(V),遵循MVC设计模式,逻辑继承图如下所示:
3
3.2.5 两者的区别在于微博的工具栏,首页微博信息工具栏在微博视图的最下方,并显示为当前微博的转发、评论、点赞信息,详情中微博工具栏显示的是被转发的微博转发、评论、点赞信息,如果该微博没有转发信息则详细信息中无工具栏,区别在于计算微博视图高度被转发信息视图高度被转发信息中工具栏数据,这三者都在子类中实现,实现细节代码中有注释说明
3.2.6 两个工具栏又极其类似,因此也抽取共性创建父类,两者通过继承将特性在子类中实现,逻辑图如下:
4
3.2.7 详细信息展示无疑通过UITableView展示,总体体分为两部分,一部分展示原微博信息,另一部分展示评论、转发、点赞信息,因为Table分组展示,UITableView内部实现原理错综复杂,尤其是各方法调用顺序,实现原理,相信很多码友一直都很困惑,看下图:
5
3.2.8 以2组表格为例,参照上图说明下表格的绘制过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1、计算表格组数(得出2组,即第0组与第1组)
?
2.1、计算第1组 表格高度(倒序额,从后面算起)
2.2、计算第1组 头部高度(可选,如果有的话)
2.3、计算第1组 尾部高度(可选,如果有的话)
2.4、计算第1组 行数
2.5、计算第1组 第0行高度
2.6、计算第1组 第1行高度
2.7、计算第1组 第n行高度
?
3.1、计算第0组 表格高度
3.2、计算第0组 头部高度(可选,如果有的话)
3.3、计算第0组 尾部高度(可选,如果有的话)
3.4、计算第0组 行数
3.5、计算第0组 第0行高度
3.6、计算第0组 第1行高度
3.7、计算第0组 第n行高度
?
4.1、计算第0组 第0行内容 (计算内容为正序)
4.2、计算第0组 第1行内容
4.3、计算第0组 第n行内容
4.4、计算第1组 第0行内容 
4.5、计算第1组 第1行内容
4.6、计算第1组 第n行内容
?
5.1、计算头部及尾部内容(这个不重要了,关键在于前面的)

3.2.9 本微博的评论、转发、点赞详细信息后续实现,待续…..
3.3 点击微博内容转到其它视图在主控制器中实现,并且其他控制器都为UITableView类型,其他控制器中点击事件也发生在Table中,因此复制到所有的点击事件(这便是模型的好处MVC设计思想)
4、关键代码
文件目录:
SABaseCell.h
SABaseCell.m
SABaseFrame.h
SABaseFrame.m
SAStatusCell.h
SAStatusFrame.m
SAStatusDetailCell.h
SAStatusDetailCell.m
SAStatusDetailFrame.h
SAStatusDetailFrame.m
SAMainController.h
SAMainController.m
SAStatusDetailController.h
SAStatusDetailController.m


5、源码下载

链接: http://pan.baidu.com/s/1gdmSVgZ 密码: 3iuq

Leave a Reply