我使用三个 View Controller ,并在每个 View Controller 上放置了 UITableView
和 UITableViewCell
。当我从 Storyboard中的第一个 View Controller 的 TableView 单元连接到另一个 View Controller 并运行模拟器时,segue 按预期工作。但是,当我以与第一个完全相同的方式从 Storyboard中的第二个 View Controller 的 TableView 单元格连接到最后一个 View Controller 时,由于某些原因,转换不起作用。
如果我定义 didSelectRowAtIndexPath:
并在其中调用 [self performSegueWithIdentifier:@"showDetail"sender:self];
在第二个 View Controller 的实现文件中,转换可以按预期工作。我不关心是 Storyboard转场还是我的代码中定义的方法来执行过渡,只要过渡正常工作即可。
不过,我还是想知道为什么会出现这样的不一致。正如我所说,我在两种情况下都以完全相同的方式连接了两个 Storyboard,并检查了属性检查器和连接检查器,但我没有发现这两个连接之间有任何区别。
此外,虽然第一个 View Controller 可以在没有定义方法的情况下执行转换,但当我定义它时,转换不起作用,并发出以下错误消息:
在意外状态下完成导航转换。导航栏 subview 树可能会损坏。
我想我不能同时使用这两种方法(即 Storyboard转场和方法调用)——我只是想知道是什么导致了这里的不一致。
我使用 iOS 7 和 Xcode 5。
最佳答案
首先,如果您使用推送 segue,如果第一个 segue 是模态的(除非您将第二个 VC 嵌入导航 Controller ),则无法推送第二个 segue。
其次,确保 de segue 标识符对于每个 segue 都是唯一的。
如果你在 storyboard 中 ctrl+drag 一个 segue,不要在代码中调用 performsegue
,你只是尝试做同样的操作两次。如果 segue 在 Storyboard中,在代码中你应该使用 prepareforsegue
委托(delegate)。
另一种方法是不在 Storyboard中使用任何 segue,然后在代码中@didselectrowatindexpath
您可以使用 [storyboard instantiateviewcontrolerwithidentifier...]
实例化您的目标 vc >,然后 [self.navigationcontroller pushviewcontroller..]
用于推送 segue 或 [self presentviewcontroller...]
用于模态。
编辑:此外,当您按住 ctrl 并拖动时,请确保您是从单元格中拖动而不是从表格中拖动。
关于ios - 从 TableView 单元格到另一个 View Controller 的 Segue 转换仅在任意时间有效 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22011206/