iOS表格视图单元格高亮边框错误

时间:2016-05-17 09:21:02

标签: ios objective-c uitableview border

我使用此功能突出显示表格单元格边框:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if(currentIndexPath != indexPath){
        [self clearCellRowBorder];
        CGColorRef cyan = [UIColor colorWithRed: 0.0f/255.0f green: 255.0f/255.0f blue: 255.0f/255.0f alpha:1.0f].CGColor;
        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        [cell.contentView.layer setBorderColor: cyan];
        [cell.contentView.layer setBorderWidth:2.0f];
        currentIndexPath = indexPath;
    }
}

假设我有很多行,超出屏幕大小所以我需要滚动到底部看到更多行。我遇到的问题是当我选择第一行时,第一行突出显示一切正常,但是当我滚动到底部看到其他看不见的行时,其中一个看不见的行也会突出显示。那么任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

新,

由于您已在currentIndexPath中保存了选定的索引路径,

你可以,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
 //after creating cell :)
 if(currentIndexPath != indexPath){
    [self clearCellRowBorder];
   }
 else {
     CGColorRef cyan = [UIColor colorWithRed: 0.0f/255.0f green: 255.0f/255.0f blue: 255.0f/255.0f alpha:1.0f].CGColor;
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell.contentView.layer setBorderColor: cyan];
    [cell.contentView.layer setBorderWidth:2.0f];
 }
}

那应该做你的工作:)快乐的编码:)

答案 1 :(得分:0)

表格视图单元格正在“重用”以提高性能。因此,您看到突出显示的单元格是重复使用的单元格。

要解决此问题,您可以覆盖UITableViewCell方法 prepareForRese 并将突出显示设置为false(否)。

修改 例如:

- (void)prepareForReuse {
    [cell.contentView.layer setBorderWidth:0.0f];
}