当用户在突出显示单元格的情况下滚动表时,Unhighlight行会在indexpath上返回max int

时间:2013-06-19 12:06:03

标签: iphone ios objective-c uitableview

我有一个UILabel作为我的细胞的子视图。当用户突出显示一个单元格时,标签文本会改变它的颜色,当单元格未突出显示时,颜色会变回,就像通常的单元格textLabel一样。

问题是,如果用户点击一个单元格并滚动表格,单元格将不会突出显示,将调用unhighlight委托方法,但它将返回[2147483647,2147483647]作为索引路径,文本不会更改,因为那里在索引路径上没有单元格。

以下是代码:

- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath*)indexPath{
      NSInteger section = [indexPath section];

      //only change the text on cells at section 1

      if (section == 1) {
          //get cell with given index path 
          UITableViewCell *currentCell = [tableView cellForRowAtIndexPath:indexPath];
          // retrieve the UILabel by it's tag
          UILabel *cellLabel = (UILabel *)[currentCell viewWithTag:1011];
          cellLabel.textColor = [UIColor darkGrayColor];
      }
}

- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath*)indexPath{
      NSInteger section = [indexPath section];
      if (section == 1) {
          UITableViewCell *currentCell = [tableView cellForRowAtIndexPath:indexPath];
          UILabel *cellLabel = (UILabel *)[currentCell viewWithTag:1011];
          [cellLabel performSelector:@selector(setTextColor:) withObject:[UIColor lightGrayColor] afterDelay:0.2f];
      }
}

当用户滚动表格并突出显示单元格时,如何检索正确的单元格来更改它的UILabel子视图文本?

1 个答案:

答案 0 :(得分:2)

测试那些方法我对indexPath有相同的奇怪结果(不知道,为什么这些方法不能正常工作)。

但我建议只编写自己的UITableViewCell子类并覆盖以下方法(每次选择/取消选择一个单元格时调用):

- (void) setSelected : (BOOL) selected animated : (BOOL) animated {
    [super setSelected: selected animated: animated];
    // your customisations to your UILabel
    if (selected == NO) {
        self.textLabel.textColor = [UIColor lightGrayColor];
    } 
}

希望这个答案可以帮助您解决问题