如何使用selectRowAtIndexPath强制UITableViewCell选择?

时间:2012-12-28 19:07:19

标签: iphone objective-c ios uitableview

我试图使用selectRowAtIndexPath强制选择(突出显示)UITableViewCell ..

例如, 假设我想总是让表格视图中的第一个单元格突出显示,我在viewDidAppear中应用以下逻辑

[self.tableViewPrompts selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:0];

很好地工作。但是当我尝试在应用程序的其他地方应用相同的逻辑时,单元格未被选中。我甚至尝试在调用上述方法之前取消选择其他单元格并在调用此方法之前和之后重新加载tableview但是没有一种方法似乎工作!

我甚至使用tableview的委托来强制调用didSelectRowAtIndexPath.Event这不起作用。

PS:细胞的选择不会触发任何我试图实现的动作,突出显示所需的细胞。

我在这里做错了什么?

非常感谢帮助!!

3 个答案:

答案 0 :(得分:5)

  

单元格的选择不会触发我想要实现的任何操作,突出显示所需的单元格。

为什么不使用单元格突出显示的属性?

UITableViewCell *cell = [self cellForRowAtIndexPath: [NSIndexPath indexPathForRow: 0 inSection: 0]];
cell.highlighted = YES;

现在不能测试它,但它应该可以工作.....

修改

当然,更好的是:更改你的cellForRowAtIndexPath来做那个

-(UITableViewCell) tableView:cellForRowAtIndexPath:
//...
if (indexPath.row == 0 && indexPath.section == 0) cell.highlighted = YES
else cell.highlighted = NO;
//...
return cell;

答案 1 :(得分:3)

我很疑惑为什么这不适合你的情况。这是我在视图控制器中的几个地方使用的方法,包括viewDidAppear,我发现你正在做的事情没有真正的区别:

- (void)selectRow1
{
    NSIndexPath* idx = [NSIndexPath indexPathForRow:1 inSection:0];
    [_table selectRowAtIndexPath:idx animated:NO scrollPosition:UITableViewScrollPositionMiddle];
    [self tableView:_table didSelectRowAtIndexPath:idx];
}

_table是我的表属性变量,并且调用了didSelectRowAtIndexPath,因此可以进行选择操作,但是与您的代码唯一真正的区别是scrollPosition参数。

答案 2 :(得分:0)

只需使用setSelected突出显示单元格:

  [cell setSelected:YES];

我已为整个目的UITableView-Ext

创建了此扩展程序