UITableView - 以编程方式选择一行

时间:2014-07-21 17:30:43

标签: ios uitableview

所以我想到StackOverflow上关于这个主题的所有问题,我不需要问这个问题。好吧,没有一个答案对我有用。

基本上,我试图在用户按下按钮时手动调用-didSelectRowAtIndexPath:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self tableView:[viewControllers objectAtIndex:1] didSelectRowAtIndexPath:indexPath];

其中viewControllersUITableView的数组,已完全初始化并且包含所有内容。 但是当我运行代码时,我在这里得到错误:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    currentUnit = [tableView cellForRowAtIndexPath:indexPath]; //on this line
    [self prepareSecondPageController: [currentUnit.textLabel text]];
    [unit2 setText:[NSString stringWithFormat:@"Unit Two: %@", currentCompatCategory]];
}

,控制台显示:

  

- [UITableViewController cellForRowAtIndexPath:]:无法识别的选择器发送到实例0xc177640

(0xc177640是tableView

我不知道这是否会有所帮助,但这是我在indexPath调试器中的样子:

enter image description here

3 个答案:

答案 0 :(得分:1)

您将错误的参数传递给didSelectRowAtIndexPath方法。第一个参数必须是视图控制器的表视图而不是TableViewControllers数组(根据您的异常信息,您的数组似乎不是表视图数组)。

[self tableView:self.tableView didSelectRowAtIndexPath:indexPath];

答案 1 :(得分:1)

您正在传递Controller而不是tableView。也许这就是应用程序崩溃的原因。

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    // Assuming viewControllers is the collection of UITableViewControllers.
    UITableView *tableView = (UITableView *)[viewControllers objectAtIndex:1].tableView;
    [self tableView:tableView didSelectRowAtIndexPath:indexPath];

答案 2 :(得分:0)

看起来在数组中有TableViewController而不是Table Views。这导致了错误,因为TVC没有方法cellForRowAtIndexPath: