prepareForSegue 未在嵌入式 segue 中调用
Posted
技术标签:
【中文标题】prepareForSegue 未在嵌入式 segue 中调用【英文标题】:prepareForSegue not called in embedded segue 【发布时间】:2013-12-07 14:37:30 【问题描述】:我在视图控制器的容器中嵌入了一个表视图控制器。
在视图和表视图控制器的 prepareForSegue 方法中,我都输入了 NSLog(@"name of the controller") 我看到了视图控制器的日志,但没有看到表视图控制器。我不应该也看到我的表格视图的 prepareForSegue 的 nslog 吗?
【问题讨论】:
你应该在你的表格视图控制器类中看到日志,但只有在你执行转场之后(如果你从那里开始转场,请触摸一个单元格)。 Using container view as a Dashboard的可能重复 就这么简单........***.com/a/25991836/294884 容器视图的简单介绍(如果需要)***.com/a/23403979/294884 【参考方案1】:完全正确 - 正如 Greg 解释的那样,embed 类型的 segue 是
仅在设置期间调用!
这很令人困惑。可以这么说
“prepareForSegue”是一个非常糟糕的名字!
“为转场做准备”这个名称仅在(罕见!)您实际上是从一个场景“转场”到另一个场景的情况下才有意义
在 ios 应用程序容器中,视图是司空见惯的,到处都有它们,而您很少使用实际的“场景转场”。
真的,“prepareForSegue”应该被称为:
“嘿,我们正在设置你所有的容器视图——你现在可以获取你需要的任何信息!哦,如果你碰巧在做一个场景转场,你也可以使用它!”
怎么样:
containerViewBeingSetUpOhAndAlsoPrepareForSegueIfYouHappenToBeDoingThat:
有点长,但更清楚!
这只是你必须知道的关于 iOS 的那些奇怪的事情之一,但从未在任何地方解释过。
这里是初学者使用容器视图的完整解释https://***.com/a/23403979/294884
【讨论】:
【参考方案2】:在您的日志框架视图控制器中,prepareForSegue 将在 initWithCoder: 之后直接调用以准备您的 TableViewController。我看不到您在表格视图控制器和另一个视图(右侧视图)之间的连接,但我相信当您点击该行时它会被调用。
//扩展
另一件事可能是您没有在视图层次结构中添加 UINavigationController 并且您将 segue 样式设置为“推送”。尝试在属性检查器中将 segue 的样式更改为“模态”。 希望对您有所帮助。
【讨论】:
嗨,格雷格,表格视图控制器和右侧的其他视图之间存在连接,但是当我点击该行时,我没有看到 prepareForSegue 的日志。 发生这种情况是因为您将控件从表视图控制器拖到另一个视图控制器。你应该控制从 ROW 到其他 VC 的单调。删除此 segue,然后重试。 不,我没有从表格视图拖动到其他视图,实际上我确实控制了从每一行单击到它所连接的视图。我通过单击 segue 确认了这一点,并且我要从中选择的行被选中 总结一下:我有一个 prepareForSegue,它似乎可以触发并在 LogFrameViewController 中记录 NSLog(@"LogFrameViewController")。我在 TableViewController 中有一个 prepareForSegue,它没有记录或似乎触发 @SamLuther 查看扩展帖子。【参考方案3】:除了已经讨论过的内容之外,您应该确保在接下来的委托调用中没有忽略 segue 标识符。
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
【讨论】:
以上是关于prepareForSegue 未在嵌入式 segue 中调用的主要内容,如果未能解决你的问题,请参考以下文章
Swift:使用 prepareForSegue 将 UIView 容器的高度设置为嵌入式 UITableView 的高度
如果我使用 prepareForSegue 传递数据,则无法嵌入导航控制器