1.UITableViewController组成
UITableViewController中的View类型是UITableView。
+tableView : UITableView
+Table Header 表头
+Section 分区
+Section Header分区头
+Row 行(Cell)
+Section Footer分区尾
+Table Footer 表尾
表头、表尾、分区头、分区尾都可以没有。
TableView 有两种Style:
Plain: 普通Style,只有一个分区。
Group: 组,有多个分区。
2.UITableView两个委托
数据源 是TableView显示数据的来源。
.dataSource : id<UITableViewDataSource>
代理对象 处理一些数据源之外的其它事项,事件触发。
.delegate : id<UITableViewDelegate>
3.UITableView重的问题
三问:(显示)
a.你有几个分区
numberOfSectionsInTableView
b.每个分区有几行
numberOfRowsInSection
c.每行的内容是什么
cellForRowAtIndexPath
4.创建一个UITableViewController
使用步骤:(自动生成)
a.继承UITableViewController
b.实现三问
使用步骤:(xib手动生成)
a.创建UIViewController
b.拖拽一个UITableView到父视图中
c.将VC设置为被委托对象
<1>遵守协议(UITableViewDataSource)
<2>实现方法(三问)
<3>委托对象与被委托对象建立关联(连线)
使用步骤:(code手动生成)
a.创建UIViewController
b.手动创建UITableView对象(code)
c.将VC设置为被委托对象
<1>遵守协议(UITableViewDataSource)
<2>实现方法(三问)
<3>委托对象与被委托对象建立关联
(tv.dataSource = self)
5.多分区的使用
每个分区有几行 参数1:事件源 参数2:区分不同的分区
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
注:要将UITableView的Style改成Grouped。
6.区分多行 indexPath
NSIndexPath是一种集合(保存多维数组)描述数据关系。
用来存储路径。例:描述分区行->Cell
.section 描述哪个分区
.row 描述此分区的哪一行
7.模型层与View层的关联
练习:
TRPerson -> name
zhangsan
lisi
wangwu
zhaoliu
qianqi
8.UITableViewCell类
8.1 是什么
TableView中每一行就是一个UITableViewCell类型的对象。UITableView其实是UIView的子类,它是一个视图。
8.2 Cell中的属性
UITableViewCell视图有以下子视图
.textLabel : UILabel 用于在Cell上显示文字内容
.detailTextLabel : UILabel 用于在Cell上显示详细内容
.imageView : UIImageView 用于图片
8.3 Cell显示的样式
Cell的style(系统提供的) initWithStyle
Default:默认,不显示详细信息
Value1:左右显示主要信息和详细信息,显示图片信息
Value2:居中显示详细信息,不显示图片信息
Subtitle:可以显示详细信息,详细信息另起一行
也可以自定义Cell
8.4 Cell的性能(Cell的重用)
(1)第一种重用方式
tableView在运行期间,出了界面的Cell并不会释放,而是放到了tableView中的队列中,所以,需要在创建Cell之前先试着从此队列中去拿已经存在的Cell对象,如果能拿到就不需要创建,而是重用Cell对象。
(2)***第二种重用方式
向tableView“注册”一个重用的Cell对象,注册后如果向tableView索要队列中的对象时,如果没有队列中没有空闲的Cell对象,tableView会自动帮我们创建一个并返回,这样可以确保dequeue方法一定会返回一个Cell对象供我们使用。
使用步骤:
<1>注册
- (void)viewDidLoad
{[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellIdenitifier]; }
<2>直接去队列里面取
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdenitifier];
8.5 一向应(答)
处理相应的事件方法。
遵守一个协议(UITableViewDelegate)
实现方法 didSelectRowAtIndexPath
例:点击某一个Cell,跳转到详细信息界面。
1)创建一个详细信息界面
2)传值
将选中Cell的信息传值给新的界面
3)push一个新的界面
作业:
1.一个列表信息
(图片 城市 人口)(TVC)->点击->显示详细信息(VC)
图 北京 2000 图
城市:北京
人口:2000
2.一个列表信息
城市(TVC) ->点击-> 区(TVC)
北京 海淀区
上海 朝阳区
广州 丰台区