0

我正在使用一个UISplitViewController主/详细应用程序。主控制器提供了一个具有不同单元格的表视图,以替换细节视图控制器。选择单元格时,不会触发相应的替换序列。

您可以在下图中看到,我有一个替换 segue 连接到标有“省名”的表格视图单元格。

带有替换序列的主控制器表视图单元 在此处输入图像描述

tableView:didSelectRowAtIndexPath:方法被调用,我可以通过编程方式生成 segue performSegueWithIdentifier:sender:,但我应该这样做!我经常从表格视图单元格中使用 push segue,没有问题。

有趣的是,如果我将一个替换转场连接到一个UIBarButtonItem它就可以正常工作(即,我不必编程方式执行转场)。这个问题特别是要替换连接到表格视图单元格的 segues。

这是一个错误还是我在这里忽略了什么?

4

2 回答 2

0

可能您在创建转场时选择了“附件动作”而不是“选择转场”?

于 2013-03-28T13:16:38.660 回答
0

在处理了一段时间之后,我想我知道为什么替换segues对于表格视图单元格不是自动的。很多时候,当前的细节视图控制器是正确的——你只是想改变它的“细节项”。只有当您需要不同类型的细节控制器时,然后(并且仅在那时)您才想要执行 segue 以替换当前的细节视图控制器。因此,我将替换转场与主视图控制器(而不是表格单元格)链接起来,并使用以下逻辑,仅在真正需要新控制器时才执行转场:

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

    if (indexPath.section == 0) {  // Canadian Province
        if ([self.detailViewController isKindOfClass:[ProvinceDetailViewController class]]) {
            self.detailViewController.detailItem = 
                          [appDelegate.provincesDictionary objectForKey:place];
            self.detailViewController.title = place;
        } else {
            [self performSegueWithIdentifier:@"ProvinceSegue" sender:self];
        }
    }

    // ...
}

PS 如果您对拆分视图控制器使用替换转场,请确保拆分视图委托不是详细视图控制器(这是 Xcode 模板安排事物的方式)。我创建了一个独立的委托对象,它在调用关联的委托方法时发送通知。这似乎工作得很好。

于 2013-03-28T18:42:07.833 回答