嵌套Segue中的prepareForSegue方法未被调用

4

我在一个视图控制器的容器中嵌入了一个表格视图控制器。

在视图控制器和表格视图控制器的prepareForSegue方法中,我都放了NSLog(@"name of the controller")。我可以看到视图控制器的日志,但是看不到表格视图控制器的日志。难道我也应该看到我的表格视图的prepareForSegue的nslog吗?

enter image description here


你应该在表视图控制器类中看到日志,但只有在执行segue之后才能看到(如果你是从单元格触发的话)。 - rdelmar
可能是使用容器视图作为仪表板的重复问题。 - Fattie
这个简单吗........ http://stackoverflow.com/a/25991836/294884 - Fattie
如果需要,这是有关容器视图的简单介绍:https://dev59.com/KGAg5IYBdhLWcg3wm7_6#23403979 - Fattie
3个回答

15

确切地说,如Greg所解释的那样,embed类型的segue仅在设置期间才会被调用!

这个名字真的很糟糕!

这非常令人困惑。你可以说,

"prepareForSegue"是一个非常糟糕的名称!

只有在你实际上从一个场景跳转到另一个场景的情况下,名称“prepare for segue”才有意义(很少出现)。

因此,“prepareForSegue”应该被称为:

"嘿,我们正在设置您所有的容器视图 - 您可以在此时获取任何您需要的信息!哦,如果您碰巧正在进行场景跳转,您也可以使用它!"

那么:

containerViewBeingSetUpOhAndAlsoPrepareForSegueIfYouHappenToBeDoingThat:

这个有点长,但更清晰!

这只是iOS中你必须知道但是从未在任何地方解释的奇怪事情之一。

这里有一个针对初学者的关于使用容器视图的完整解释https://dev59.com/KGAg5IYBdhLWcg3wm7_6#23403979


2
在您的日志框架视图控制器中,prepareForSegue会在initWithCoder之后直接被调用以准备您的表视图控制器。我看不到您的表视图控制器和另一个视图(右侧视图)之间的连接,但我认为当您点击行时它会被调用。
//扩展
另一种可能是您未将UINavigationController添加到视图层次结构中,并且您设置了segue的风格为“push”。尝试在属性检查器中将segue的样式更改为“modal”。 希望这可以帮助您。

嗨 Greg,表视图控制器和右侧其他视图之间存在连接,但当我点击行时,我没有看到 prepareForSegue 的日志。 - Sam Luther
总结一下:我有一个 prepareForSegue,在 LogFrameViewController 中似乎已经触发并记录了 NSLog(@"LogFrameViewController")。我在 TableViewController 中也有一个 prepareForSegue,但它没有记录或似乎没有触发。 - Sam Luther
@SamLuther 请查看扩展帖子。 - Greg
我的意思是,如果你没有导航控制器,你的推送转场就不会起作用。 - Greg
Greg,我太蠢了,表视图控制器的委托没有设置为我的自定义控制器。非常抱歉浪费了您的时间,感谢您的帮助。 - Sam Luther
显示剩余5条评论

0

除了已经讨论的内容之外,您还应确保在以下委托调用中不忽略segue标识符。

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接