IOS TableView详解(一)

来源:互联网 发布:nginx linux内核优化 编辑:程序博客网 时间:2024/05/24 05:02

 
 先考虑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详解(二)

0 0
原创粉丝点击