老文新发
表格
创建一个表格有两种方式:
1、通过controller实现
2、直接创建一个tableview
前者用于整个页面或者window就是一个table,后者可能作为页面的一小部分
tableview有两种形式,简单plain和分组grouped的,与简单不同的是,分组的table,组与组之间有一定间隔,可以设置各组的标题文字等。
tableview的数据通过设置data source获得,其事件通过代理delegate来实现,可能发生的事件有:
1、表格中的一个元素即将消失在视野中,这个时候能需要将对应占用的内存释放掉
2、表格中一个元素即将被展示出来
通过代理,还可以设置表格的页头和页脚,两个者是可选的
如果自行继承一个通用controller,可以在viewdidload中,在创建默认view后,将tableview作为默认view的子view创建出来,并且作为自己的property
代理在实现指定接口的时候,可以取得tableview的指针。如果这个代理同时管理多个table,这个指针会很有用。
一个元素的位置由两个索引指定:分组的索引和元素索引,前者是元素所在的分组组号,后者是无素在一个组内的的序号,都从零开始。
CellReuseIdentifier是这样一个串,他唯一指定了在展示期间,元素用于展示所对应的资源双端队列。由于屏幕大小是有限的,实际需要绘制的元素相对于整个表格来说通常是极小的。当用户在上下滑动浏览表格的时候,从视野当中移出的元素所占用的资源,可以被即将出现的元素所重用,这些资源可以用一个双端队列来表示,每个表格对应一个队列,这个队列全局唯一,由CellReuseIdentifier来唯一标识。
cmd+shift+o 当指针指向一个协议名称时,用这个快捷键可以显示出这个协议需要强制实现的函数
datasource协议强制实现3个函数,分别用于获取当前表格一共有多少个分组,按组索引获得组元素的数量,以及按照索引给出元素的内容。
- (UITableViewCell *)
这个函数的参数indexPath,是一个对象,包含了组号和元素号。
cell并非由用户手工创建,而是在程序自行创建的,开发者需要做的是从资源队列中取出一个cell再设置好它的内容和形式。只要是继承自cell的类型,都可以创建,具体的类型在创建table的时候与identifier一并给出。
tableview类型用autoresizingmask来确定当父view发生变化时,表格的大小怎样随之改变
tableview可以通过设置附件的值来创建带有“附件”的表格,这个应该是为了便于开发,将常用的功能集成到标准里了。这个所谓附件,其实是一个按扭,如果设置了附件,可以通过代理实现一个附件的点击事件回调,开发者可以通过弹窗或者其他形式展开更多内容。这个回调可以取得表格,和附属的表格元素的索引,进而可以取得这个元素的指针。
除了仅仅指定一个附件的类型来增加一个简单的按扭外,还可以直接设置一个自定义的附件view,可以是各种各样的view,对各种各样的事件作出响应。
自定义的附件有个缺陷,它不能像预定义的附件那样,在回调函数中,取出对应元素的索引,需要通过别的办法取得相关信息。一种方法是在创建附件的时候打上一个标签,这个标签标识出附件的位置。但这个信息显然是不够的,标签是一个整数,不足以表示元素的位置。除了派生UIButton类以外,还有一个办法。因为附件的父view,或者是父view的父view一定是元素,所以可能通过层级关系找到对应的表格元素。除了根view以外,所有的view者持有superview,再加上通过class函数判断类型,即可找到表格元素。
tablecontroller能够自动创建一个表格,比如在最高的delegate里,将一个tablecontroller的子类指定为根window的根controller,它会在init函数中默认地构造一个tableview,接下来只需要设置对应的元素类型和指示器,table的初始化工作就完成了。同时,作为自己tableview的deletate,需要实现那3个函数,将那3个函数填充好就大功造成。
事件响应
可以通过addtarget来实现小部件的事件响应,指定事件对应的控件、响应的对象、响应的成员函数。这个成员函数仅接受一个参数,即与控件类型的指针,这样可以根据控件的具体状态作出不同的回应。
调试方法
如果想知道一个view的代理,指出的函数的调用时机、先后顺序,可以分别在各函数中打印日志
开发流程
视觉通常在功能开发接近尾声的时候,给出最终使用的素材,所以给排期的顺序是这样的,
1、交互稿给出排期:交互稿初稿设计,预交流,修改,发布
2、视觉在交互稿最终发布式后,定出排期
3、rd给出开发、测试、上线排期,除了功能开发的时间以外,还需要考虑和后端联调的时间、取得交互稿之后微调布局的时间。
合作经验
当有H5需要嵌入app的时候,H5作为一个独立的应用,本身可能已经相当完整,需要根据app的布局进行适当的修改。