ios - 从 TableView 单元格到另一个 View Controller 的 Segue 转换仅在任意时间有效 - 为什么?

标签 ios objective-c uitableview segue

我使用三个 View Controller ,并在每个 View Controller 上放置了 UITableViewUITableViewCell。当我从 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/

相关文章:

ios - 大小适合 : is returning different Values iOS 5 and iOS 6

iphone - 在 UILabel 的一部分上点击手势

ios - 如何在 Swift 中创建嵌入式 JSON 对象并返回字符串?

objective-c - 如何快速编写这段代码?

ios - 带有选择器错误的快速覆盖方法

iphone - 为什么我的Xcode 4.6 本地化文件只能选择英文?

objective-c - 创建一个 iOS 计时器

objective-c - 静态分析和 "create rule"

ios - 在同一列表/表格 View 中显示缓存的服务器联系人和本地 iOS 联系人

swift - 使用获取请求结果数组和结构设置 UITableView 部分和行的问题