几点观察:
明显的问题是从主视图控制器到详细视图控制器的转场类型。它应该是一个“替换”segue,当您选择该 segue 并单击属性检查器时,请确保您指定了“详细拆分”的目标:
顺便说一句,故事板在 UI 上有点混乱的原因是,您在该细节视图控制器中有两个 segue,一个来自拆分视图控制器的细节视图(因此细节的方形形状场景),另一个来自主视图控制器(因此是细节场景的不正确的狭窄形状)。可怜的 Interface Builder 可能正坐在那里想“嘿,你想让我使用这个场景作为拆分视图的细节,还是作为主视图控制器的替代品?!?” 我之前的观点解决了这个冲突,但这解释了为什么在您当前的故事板中,细节场景的形状会根据您当前选择的场景而变化。
如果您打算这样做,我建议您可能希望从主场景到细节场景的转场实际上是从主场景到导航控制器场景,而不是到细节场景本身:
不过,坦率地说,在描述了如何修复 segue 之后,您不应该使用 segue!创建一个空白的新“主从”项目,看看它做了什么。你会注意到它看起来更像:
如果您将细节视图控制器更改为不同的场景,您真的只想要从主场景到细节场景的转场。但你没有那样做。您可能只想告诉细节视图控制器它正在查看的对象已更改并且应该更改reloadData
。鉴于您的详细信息视图控制器本身是一个表格视图,主视图控制器将有一个方法可以执行以下操作:(a)告诉详细信息视图控制器它正在查看的详细信息项;(b) 告诉它reloadData
。所以它可能看起来像:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDate *object = _objects[indexPath.row];
self.detailViewController.detailItem = object;
[self.detailViewController.tableView reloadData];
}
你可以让它工作,但我认为后一种方法可能更有意义。