1、01课前介绍
- 第一个任务:类配置界面(0·19)
- 第二个任务:qq(3·20)
- 第三个任务:应用管理(4·19)
2、静态单元格的使用
- 通知和代理的共同点和不同的
- 共同点:对象之间的通信
- 不同的:代理(一对一),通知(一对多)
- 如何监听设备旋转,电池电量改变,贴近脸部(近距离传感器)等
- 静态单元格
- (10:20)静态单元格和动态单元格的分别 使用静态单元格:必须使用UITableViewControler
- (17:30)代码演示,如果使用UIViewContontroler,将“属性”->“Content”->改为“Static”,就会报错:Illagal Configuration:Static table views are only vaild ...
- (21:30)UITableViewControler创建静态单元格演示 3、QQ好友(动态单元格)
- 嵌套单元格
- 思路:
- 拖拽资源(plist,ico)
- 懒加载
- CFriend
- initwWthDict
- frameWithDict
- CGroup
- initwWithDict
- groupWithDict
- cell(tbds)
- CFriend
4、自定义单元格
- + (instancetype)friendWithTableView:(UITableView *) tableView;
- - (void)setFriendModel:(CZFriend *)friendModel;
- 隐藏状态栏(hsb)
5、设置组的HeaderView
- 思路:根据数据创建headerview
- 思路:返回hearview的string接口不够丰富,使用创建uiview的方法也可以实现,不过这样不可以重用,而且需要自己写代码维护!
- 思路:使用系统提供的接口,可以重用,类似cell的方法,使用返回header view(tvhf)的接口
- (15:50)思路:代码尽量解耦,减少在c端的代码,使用文件自定义headerview(tvhfd)
- 思路:自定义headerview,将重用代码抽离 思路:希望在创建子控件的时候,同时创建子控件(初始化按钮和label)
- 思路:重写Set方法,将model赋值给子控件(一般是常变的变量,例如text,color)
- 赋值数据
- 设置按钮上的文字
- 设置label上面的文字
- 根据bounds设置frame(按钮和Label),问题是没有预期的结果,不过bounds都是0,坐标不准
- 思路:在刚刚创建好的headerview的frame为0,但是程序运行的时候,会有frame,是因为tableview会用到headerview,然后tableview会根据一些参数去设置header的frame
- 思路:简单来说,就是使用bounds的时机过早。使用layoutsubviews保证headerview的frame已经使用。
7.设置组的Header View03(1)
- 思路:设置headerview的frame及子控件的配置。- (void) layoutSubviews,当Hearerview的frame发生改变,就会调用
- (14:40)思路:按钮文字颜色(黑->白),设置按钮的对齐方式
- 思路:设置按钮默认时和高亮时的背景图
- 思路:怎么用UI实现按钮距离左边和title的边距
- 思路:怎么用代码实现上述的功能。设置按钮中内容的整体左对齐。设置按钮内容的左边距(0,10,0,0),设置按钮标题的左边距(0,5,0,0)
- 思路:实现分组的展开和合并,由于是根据按钮的点击事件确定rowsinsection返回0(合并)还是XX.counts(展开)。要监听按钮的点击事件
- 因为rowsinsection不仅是你的流程会执行,整个UITableview也会不停是执行,所以为了避免操作无效(被控制器回滚了)。
- 思路:使用了状态标志位的方法,你的命令(点击事件)置位状态
- 思路:仅置位状态,没法更新状态。因此需要刷新数据
- 思路:headerview无法刷新数据,使用代理,请控制器做代理帮忙刷新
- 思路:因为一个组的刷新,是reload所有的数据,效率太低!局部刷新,局部刷新需要Set变量,因此需要标记那个tableview需要刷新,在Hearderview创建的标记tag.将tag赋给Set
- 思路:由于动态Left太丑。使用fade,淡入淡出效果!
8.设置组的Header View04(1)
- 思路:点击按钮时候,图片需要旋转。图片旋转需要拿到按钮的图片变量,并改变变量transform。
- 思路:当使用代理的时候,点击按钮,旋转,然后马上又旋转回去了!不符合要求。原因:在你的点击事件里面,调用了reload,并且马上转动按钮,但是你的刷新流程还没有完成,而你已经完成了转动了,当重新刷新完数据,hearderview也更新完成了,但你重新加载了图片(默认向下)!动作被回滚!
- 思路:使用点击事件里面先后执行翻转和刷新动作时,会实现回滚,因此不能实现效果使用,使用didMoveToSuperview,当Headerview加载完成的时候执行! 疑问:其实可以在layoutSubviews里面根据状态来决定旋转方向
- 思路:当旋转的时候,图标会变长
- 思路:当保证翻转的时候不变长,图标会被截断
- 思路:展开的状态不对问题,重用单元格状态保留的问题
- 思路:判断好友是否是会员,修改他的名词为红色名称,否则黑色
- 思路:为啥不使用xib,而是硬编码
9(01).懒加载,创建cell
- 获取模型数据
- 创建cell
- 手工创建
- 利用xib加载
- mainstroyboard创建一个ID的cell,直接重用,ID不能重复使用(storyboard里面的cell,不能有同一个ID),不然报错
- 自定义cell
- 多重cell
- 把模型赋值给cell
- 返回cell 9(0)拖数据,加载数据,创建文件
- 可以在project的属性哪里,添加类的prefix 10
- 点击按钮弹出一个label
- 思路:调整tableview的行高,在storyboard里面,修改row height没有用
- 思路:为btn添加事件
- 事件完成两个事:禁用按钮,标记是否已经被禁用
- 思路:下载按钮状态异常。点击过的按钮,后面重用的cell保留了。需要更新,并且在Set里面判断按钮是否禁用了
11。弹出label
- 要控制器做代理,帮忙创建一个label并显示到tableview
- 创建label
- 设置文字
- 设置背景色
- 文字颜色
- 设置label大小
- 修改Label文字大小
- 设置label透明度
- 居中显示
- 圆角显示
- 加入到tableview里面
- 动画显示uilabel 0 - > 0.6 -> 0
- 从view删除uilabel
12.bug fix
- 思路:label弹出的位置有问题
- 思路:view是tableview,当tableview滚动的时候,Label会跟着滚动
- 思路:加入到app的窗口上去。窗口是固定的
- 控件不可见
- frame属性为0,或位置不对
- hidden = YES
- 是否添加到父控件中
- 被其他控件挡住了
- 检查父控件是否也有这种问题
- layoutSubviews
- 要继承父类的方法,[super layoutSubviews]
13.kvc略