在 Swift 中为嵌入式 tableView 中的 segue 做准备

Posted

技术标签:

【中文标题】在 Swift 中为嵌入式 tableView 中的 segue 做准备【英文标题】:Preparing for segue in embedded tableView in Swift 【发布时间】:2014-09-30 06:10:35 【问题描述】:

我有一个 UITableViewController,其中静态单元格通过情节提要嵌入到普通 ViewController 中。这是按预期工作的。但是,当我想在单击嵌入式 tableview 上的单元格时为 segue 做准备时,应用程序崩溃而没有真正的错误。

我有一个嵌入 UITableViewController 的类 TableViewVC 和一个嵌入它的类 RootVC。我要实现方法:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?);

我从 TableViewVC 中的特定静态单元格中创建了故事板中的转场。当我在 TableViewVC 中实现此方法时,它永远不会被调用。它确实在 RootVC 中被调用,但是当我尝试访问 segue.identifier 属性时崩溃。当我在这里调试应用程序时,我可以看到类型是 segue 是:

UIStoryboardEmbedSegue

有谁知道我可以如何正确地为这个 segue 做准备并访问标识符属性以了解单击了哪个单元格?

编辑:错误截图:http://cl.ly/image/2z031b2B3i0o

【问题讨论】:

在应用崩溃时发布 Xcode 的屏幕截图。 【参考方案1】:

UIStoryboardEmbedSegue 用于在 ViewControllers 中嵌入关系。它正在建立您的 RootVC 和 TableVC 之间的父子关系。它崩溃是因为您可能没有设置此特定 segue 的标识符。如果您对嵌入关系不感兴趣,则不应在 RootVC 中覆盖此函数。

您似乎没有正确设置单元格中的转场。如果您发布故事板的图片,我们可以查看。

另一种方法是从您的 TableVC(而不是单元格)中设置一个 segue,方法是控制从情节提要中 VC 顶部的黄色 VC 图标拖动到您想要的目的地。然后在didSelectRow 中以编程方式执行segue。

【讨论】:

这确实是问题所在。我停止尝试使用故事板并使用您提到的 didSelectRow 方法修复它。非常感谢!【参考方案2】:

我遇到了类似的问题。如果标识符在情节提要中留空,您将无法访问 segue.identifier

【讨论】:

我的故事板中的 segue 肯定有一个标识符。我已经尝试删除 segue,清理项目并再次添加它。

以上是关于在 Swift 中为嵌入式 tableView 中的 segue 做准备的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 在视图(Swift)中为多个Tableview或Collectionviews使用/传递手势识别器

swift 带有嵌入式CollectionView的TableView

如何在 Swift 中为 UITableView 设置左右边距

在 Swift 中为行插入覆盖 withRowAnimation 样式

如何在 swift 中的 tableview 中的 numberOfRowsInSection 中比较和显示不同的数组计数

如何在 Swift 2 中使用 TableView 项目访问视图控制器?