替换细节控制器的表视图单元格中的segue不会触发

时间:2013-03-28 05:20:26

标签: ios xcode

我正在使用UISplitViewController作为主/详细应用。主控制器呈现具有不同单元格的表格视图,选择后将替换详细视图控制器。当选择单元格时,相应的替换segues not fire。

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

master controller table-view cells with replace segues enter image description here

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

有趣的是,如果我将替换segue连接到UIBarButtonItem它可以正常工作(即,我必须以编程方式执行segue)。问题尤其在于替换连接到表格视图单元格的segues。

这是一个错误还是我在这里忽略的东西?

2 个答案:

答案 0 :(得分:0)

在创建segue时,您可能选择了“附件行动”而不是“选择瞄准”吗?

答案 1 :(得分:0)

使用了一段时间后,我想我有一个线索,为什么替换segues 自动为表视图单元格。大多数情况下,当前的详细视图控制器是正确的 - 您只想更改其“详细项目”。只有当您需要不同类型的细节控制器时,才能(并且只有这样)才能执行segue来替换当前的细节视图控制器。因此,我将替换segue与主视图控制器(而不是表格单元格)链接,并使用以下逻辑,如果真正需要新控制器,则仅执行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];
        }
    }

    // ...
}

P.S。如果您对拆分视图控制器使用替换segues,请确保拆分视图委托详细视图控制器(这是Xcode模板排列事物的方式)。我创建了一个独立的委托对象,在调用关联的委托方法时发送通知。这看起来效果很好。