我正在使用UISplitViewController
作为主/详细应用。主控制器呈现具有不同单元格的表格视图,选择后将替换详细视图控制器。当选择单元格时,相应的替换segues not fire。
您可以在下面的图片中看到我有一个替换segue连接到标有“省名称”的表格视图单元格。
调用tableView:didSelectRowAtIndexPath:
方法,我可以用performSegueWithIdentifier:sender:
以编程方式生成segue,但我不必须这样做!我经常从表视图单元格中使用push segue,没有问题。
有趣的是,如果我将替换segue连接到UIBarButtonItem
它可以正常工作(即,我不必须以编程方式执行segue)。问题尤其在于替换连接到表格视图单元格的segues。
这是一个错误还是我在这里忽略的东西?
答案 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模板排列事物的方式)。我创建了一个独立的委托对象,在调用关联的委托方法时发送通知。这看起来效果很好。