UITableView总结

jopen 7年前

性能优化

/**   *  每当有一个cell要进入视野范围内,就会调用一次   */  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  {      static NSString *ID = @"wine";        // 1.先去缓存池中查找可循环利用的cell      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];        // 2.如果缓存池中没有可循环利用的cell      if (!cell) {          cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];          // 尽量将cell的初始化设置,放在这个代码块中          // 如果这个设置是所有cell都要保持一致的,就可以放在这个代码块中          cell.textLabel.font = [UIFont systemFontOfSize:30];          cell.backgroundColor = [UIColor redColor];      }        // 3.设置数据      cell.textLabel.text = [NSString stringWithFormat:@"%zd行的数据", indexPath.row];      if (indexPath.row % 2 == 0) {          cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;      } else {          cell.accessoryType = UITableViewCellAccessoryNone;      }      return cell;  }

索引条

/**   *  返回每一组的索引标题(数组中放的是字符串)   */  - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView  {      return [self.carGroups valueForKeyPath:@"title"];  }

如何让tableView展示数据

  • 设置数据源对象
self.tableView.dataSource = self;
  • 数据源对象要遵守协议
@interface ViewController () <UITableViewDataSource>    @end
  • 实现数据源方法
// 多少组数据  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;    // 每一组有多少行数据  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;    // 每一行显示什么内容  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;    // 每一组的头部  - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;    // 每一组的尾部  - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section

tableView的常见设置

tableview的点击后,点击效果立刻消失

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath  {        [tableView deselectRowAtIndexPath:indexPath animated:YES];  }

样式设置:

// 设置每一行cell的高度  self.tableView.rowHeight = 100;    // 设置每一组头部的高度  self.tableView.sectionHeaderHeight = 50;    // 设置每一组尾部的高度  self.tableView.sectionFooterHeight = 50;    // 设置分割线颜色  self.tableView.separatorColor = [UIColor redColor];  // 设置分割线样式  self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;  // 设置表头控件  self.tableView.tableHeaderView = [[UISwitch alloc] init];  // 设置表尾控件  self.tableView.tableFooterView = [UIButton buttonWithType:UIButtonTypeContactAdd];    // 设置右边索引文字的颜色  self.tableView.sectionIndexColor = [UIColor redColor];  // 设置右边索引文字的背景色  self.tableView.sectionIndexBackgroundColor = [UIColor blackColor];

tableViewCell的常见设置

// 设置右边的指示样式  cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;    // 设置右边的指示控件  cell.accessoryView = [[UISwitch alloc] init];    // 设置cell的选中样式  cell.selectionStyle = UITableViewCellSelectionStyleNone;  // backgroundView优先级 > backgroundColor    // 设置背景色  cell.backgroundColor = [UIColor redColor];    // 设置背景view  UIView *bg = [[UIView alloc] init];  bg.backgroundColor = [UIColor blueColor];  cell.backgroundView = bg;    // 设置选中的背景view  UIView *selectedBg = [[UIView alloc] init];  selectedBg.backgroundColor = [UIColor purpleColor];  cell.selectedBackgroundView = selectedBg;

cell的循环利用

  • 传统的写法
/**   *  每当有一个cell要进入视野范围内,就会调用一次   */  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  {      static NSString *ID = @"wine";        // 1.先去缓存池中查找可循环利用的cell      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];        // 2.如果缓存池中没有可循环利用的cell      if (!cell) {          cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];      }        // 3.设置数据      cell.textLabel.text = [NSString stringWithFormat:@"%zd行的数据", indexPath.row];        return cell;  }
  • 新的写法(注册cell)
NSString *ID = @"wine";    - (void)viewDidLoad {      [super viewDidLoad];        // 注册某个重用标识 对应的 Cell类型      [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID];  }    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  {      // 1.先去缓存池中查找可循环利用的cell      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];        // 2.设置数据      cell.textLabel.text = [NSString stringWithFormat:@"%zd行的数据", indexPath.row];        return cell;  }

来自: http://www.cnblogs.com/66it/p/5107930.html