-1

我试图在视图中以编程方式选择表格单元格。

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection:1];

[self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];

我的代表,

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

不会被调用。

如果我用鼠标选择模拟器中的单元格,则会调用委托,但是,不是以编程方式。

为什么会这样?

4

1 回答 1

2

因为这就是框架的工作方式。尝试阅读文档。这就是他们的目的!

selectRowAtIndexPath:animated:scrollPosition:

在接收器中选择由索引路径标识的一行,可选择将该行滚动到接收器中的某个位置...调用此方法不会导致委托接收tableView:willSelectRowAtIndexPath:tableView:didSelectRowAtIndexPath:消息。

这很容易理解。didSelectRowAtIndexPath:如果您选择代码中的行(以编程方式),则不会调用委托方法。仅当用户选择该行时才调用它。

这是完全有道理的,因为:

  • 如果您在代码中选择行,您可能不希望触发委托方法。

  • 如果您确实希望触发委托方法,因为您在自己的代码中,您可以调用它。

  • 您不需要委托方法来了解该行已被选中,因为在代码中选择了它 - 您不能不知道

于 2013-05-12T04:26:42.817 回答