TableView deselectRowAtIndexPath不调用setHighlighted

时间:2015-04-13 10:00:56

标签: ios uitableview

我正在尝试更改表格视图单元格中的标签状态 我想在我推动一个不同的视图控制器时选择一个单元格,然后用我的tableview移回视图控制器 当我选择另一行时,我想删除先前所选行的标签的高亮显示(取消选择以前选择的行)并突出显示当前行的标签。

- (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated是否应该为该单元格突出显示“否”调用- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated

注意:我不是UITableViewController。

2 个答案:

答案 0 :(得分:0)

保持选择单元格:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.selected = YES;
    //Other code 
}

确保类单元格在界面构建器中没有selected = NONE。 enter image description here

取消选择最后一行:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSIndexPath *currentSelectedIndexPath = [tableView indexPathForSelectedRow];
    if (currentSelectedIndexPath)
    {
        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        cell.selected = NO;
    }
    return indexPath;
}

答案 1 :(得分:0)

首先,你应该正确设置TableviewCell [cell setSelectionStyle:UITableViewCellSelectionStyleGray];方法:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

除此之外,您可以通过

设置所选单元格的自定义背景
UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor colorWithWhite:0.97 alpha:1.0];
bgColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView:bgColorView];

对于您突出显示的选定单元格问题,您可以使用简单标记,如

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSIndexPath *ip= [NSIndexPath indexPathForRow:flagForLastSelectedRow inSection:0];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    flagForLastSelectedRow=indexPath.row;
}