一、简略版
(一)通过Storyboard自定义Cell:
(1)控制器中:
(a)取出cell、模型数据,并完成模型赋值;
(2)自定义cell类中:
(a)重写model属性的set 方法给子控件设置数据。
(3)Storyboard中:
(a)拖入UITableViewController,初始化、更改类名;
(b)更改cell类名、设置复用标识符identifier;
(c)创建子控件并完成属性关联。
(二)通过Xib自定义Cell:
(1)控制器中:
(a)创建UITabelView,设置代理、完成【nib】注册等;
(b)取出cell、模型数据,并完成模型赋值(如果未注册,则自己加载nib文件);
(2)自定义cell类中:
(a)重写model属性的set 方法给子控件设置数据。
(3)Xib文件中:
(a)拖入UITabelViewCell,更改类名、设置identifier;
(b)创建子控件并完成属性关联。
(三)通过Code自定义Cell:
(1)控制器中:
(a)创建UITabelView,设置代理、完成【类名】注册等;
(b)取出cell、模型数据,并完成模型赋值(如果未注册,则自己加载nib文件);
(2)自定义cell类中:
(a)重写initWithStyle: reuseIdentifier:定制cell子控件并添加至cell的contentView上;
(b)重写layoutSubviews设置子控件的frame;
(c)重写model属性的set 方法给子控件设置数据。
二、详细版
(一)通过Storyboard自定义Cell:
(1)创建CHJDealsTableViewController,继承于UITableViewController;
(2)创建空的storyboard文件,拖入UITableViewController,勾选初始化控制器箭头➡️,并更改storyboard中UITableViewController的类名;
添加并初始化UITableViewController 更改类名
(3)创建自定义cell类CHJDealsCell,继承于UITableViewCell;
(4)更改cell的类名并设置复用标识符identifier;
更改cell的类名
设置identifier
(5)创建cell的子控件并完成属性的关联; 创建cell子控件 完成属性关联
(6)创建CHJDealsModel类,继承于NSObject,完成模型转换;
(7)CHJDealsTableViewController中:取出模型数据,传给自定义的cell类CHJDealsCell; 取出cell,传递model
(8)重写模型对象的set方法,设置数据; 取出数据,完成设置
总结:
(a):UIStoryboard描述的是UIViewController级别的,用故事版来自定义cell(cell位于UITableView上)就意味着UITableView在故事版在的某个UIViewController上,它可以是个普通的UIViewController,也可以是UITableViewController;UITableView可以位于控制器的view上,也可以取代控制器view直接充当其view;
UITableViewController 的使用:https://www.jianshu.com/p/0fdec58da1d2
(b)在设置模版cell时,已经设置了cell的复用标识符,相当于cell已经注册过了,故取出cell时可以直接取到,不会为空;
(c)Model类完成数据转换,Cell类持有model并赋值,中间通过ViewController类完成数据调度,各居其位,各司其职;
(4)【UIStoryboard】 + 【UITableViewController】 =
【UIStoryboard】 + 【UIViewController】 + 【UITableView】 + 【Cell】;
(二)通过Xib自定义Cell:
(1)控制器中:创建 UITableView,遵守协议,设置代理,重写协议方法;
(5)CHJDealsController中:取出模型数据,传给自定义的cell类CHJDealsCell; 取出cell,传递model
(2)创建CHJDealsModel类,继承于NSObject,完成模型转换;
(3)创建CHJDealsCell类,继承于UITableViewCell,并持有model对象;
(4)创建Xib文件、添加cell、更改类名、设置identifier并添加子控件完成关联;
(6)CHJDealsCell中重写模型对象的set方法,设置数据; 取出数据,完成设置
总结:
(1)通过Xib自定义Cell其实是将UIStoryboard的工作【创建UITableView+创建UITabelViewCell】分别分散到UIViewController【创建UITableView】和Xib【完成UITabelViewCell】中完成,Model类和Cell的职责和工作量不变;
(2)取出Xib中的cell前应该完成注册或通过直接加载nib文件;
(三)通过Code自定义Cell:
(1)控制器中:创建 UITableView,遵守协议,设置代理,重写协议方法;
(3)创建CHJDealsModel类,继承于NSObject,完成模型转换;
(4)创建CHJDealsCell类,继承于UITableViewCell,并持有model对象;重写initWithStyle: reuseIdentifier:方法定制cell子控件并添加至cell的contentView上、重写layoutSubviews设置子控件的frame、重写model属性的set 方法给子控件设置数据;
(5)CHJDealsController中:取出模型数据,传给自定义的cell类CHJDealsCell;
(6)CHJDealsCell中重写模型对象的set方法,设置数据;
总结:
(1)通过纯代码自定义Cell其实是将Xib的工作【创建UITabelViewCell】在initWithFrame:中完成,Model类和Cell的职责不变;
(2)取出cell前应该完成注册或通过直接创建某种类型的cell;
网友评论