先考虑tableView中的cell,是变高还是等高,这个很重要,先考虑等高的情况:
一.cell等高
1.
新建一个类,使其继承UITableViewCell类,然后记得创建一个绑定的Xib文件
如果cell等高的话,那说明cell中的宽度已确定,高度也确定,那么最好先将xib中的cell的设计图扩大到实际的大小,这样才能看到真正的情况,这时候因为cell中的宽度,高度也确定,相当于一个宽高确定的View,所以,可以通过cell的右边界和下边界来限制里面的view
2.在tableView所在的ViewController中的viewDidLoad()方法中注册cell:
假如此cell的类名为reportListTableCell,那么先在ViewController的上面加上以下代码:
#define reportListTableCell @“reportListTableCell”
然后在viewDidLoad()方法中写入注册:
//意思即将reportListTableCell这个类压成一个nib文件
UINib *reportListCellNib = [UINib nibWithNibName:reportListTableCell bundle:nil];
//注册这个nib文件为自己的cell,此cell的标志也为@“reportListTableCell”,即其类名
[self.mySearchTableView registerNib:reportListCellNib forCellReuseIdentifier: reportListTableCell];
说到这里,其实标志位只是一个String,可以用其他String的,比如为@“1”,那么取的时候,输入标志位@“1”即可取出来reportListTableCell
我们将类名用作标志位,只是约定俗成的一种用法
3.实现tableView的协议
tableView有两个协议,分别为UITableViewDataSource和UITableViewDelegate,主界面在实现了这两个协议后,一定要记得在viewDidLoad方法里面加上以下代码,使其成为tableView的代理
self.tableView.dataSource = self;
self.tableView.delegate = self;
其中UITableViewDataSource是确定tableView中有多少cell的.
这里还有一点需要注意的是,ios中的tableView将cell分组的,即先得到有几个组,在得到每个组中在有几个cell,最后才能确认出来有多少cell
假如tableView中有三个组,那么这个tableView中cell的总数为三组中cell数量的总和
UITableViewDataSource中有两个方法必须实现:
//每组中有多少个cell, section为组号
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
//得到每个cell的方法,每个cell必须为UITableViewCell或者其子类
//因为我们已经在tableView中注册了cell,所以想要得到一个cell的话,可以通过这种方法得到
//reportListTableCell * oneCell = [tableView dequeueReusableCellWithIdentifier: reportListTableCell];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
其中indexPath为cell在tableView中所在位置的封装类NSIndexPath的对象
比如一个cell在tableView中的位置为第二组的第四个,那么他的位置的对象indexPath.section为1,indexPath.row为3
UITableViewDataSource中还有一个方法为可选实现,即为
//此方法得到tableView中的组数,不实现的话默认为1
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
另外一个协议UITableViewDelegate是响应tableView中的事件或者设置其高度的,比较重要的有下面两个方法:
//当用户点击某个cell的时候会调用的
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
//得到某个cell的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
注意,因为是先讨论的等高的情况,所以cell的高度是确定的,假如每个cell的高度是60,那么只要在上述方法中return 60即可
5.当我们想要刷新tableView的时候,只需要调用[self.tableView reloadData]即可
只要调用tableview的该方法就会自动重新调用数据源的所有方法
会自动调用numberOfSectionsInTableView
会自动调用numberOfRowsInSection
会自动调用cellForRowAtIndexPath
固定高度的tableView差不多先说到这
下一篇讨论变高的文章链接为 IOS TableView详解(二)
版权声明:本文为博主原创文章,未经博主允许不得转载。