通过 navigationController 使用 segue 传递数据

Posted

技术标签:

【中文标题】通过 navigationController 使用 segue 传递数据【英文标题】:Passing data with segue through navigationController 【发布时间】:2015-01-13 02:18:22 【问题描述】:

我正在尝试将数据从一个 viewController 推送到另一个。我已经将一个viewController 连接到另一个ViewController 的navigationController,然后将标识符设置为"showItemSegue"。我在这两行中遇到错误:

var detailController = segue.destinationViewController as ShowItemViewController
detailController.currentId = nextId!

图片说明:

代码:

override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 


    nextId = itemArray?.objectAtIndex(indexPath.row).objectForKey("objectId") as? NSString

    self.performSegueWithIdentifier("showItemSegue", sender: self)




override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) 

    if (segue.identifier == "showItemSegue") 
        var detailController = segue.destinationViewController as ShowItemViewController
        detailController.currentId = nextId!
    


【问题讨论】:

请发布完整的错误信息 【参考方案1】:

segue 的目标视图控制器是UINavigationController。您需要询问它的顶部视图控制器才能到达真正的目标视图控制器:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if segue.identifier == "showItemSegue" 
        let navController = segue.destination as! UINavigationController
        let detailController = navController.topViewController as! ShowItemViewController
        detailController.currentId = nextId!
    

【讨论】:

就像一个魅力!谢了哥们!几个小时后,它为我节省了几个小时:) 谢谢,这个解决方案似乎适用于 swift 3 太棒了!这有助于我使用嵌入在导航控制器中的模态对话框 - 没有可见的导航栏 - 以便在下一个 segued 视图控制器中拥有导航栏(+后退按钮)。由于设置相当复杂,我有点焦虑..但它工作正常:) 在搞砸这个问题时,我发现如果你在两个视图控制器之间创建 segue 并绕过情节提要上的导航控制器,那么问题中的代码就可以正常工作,你仍然在按钮栏中显示后退按钮。如果您在视图控制器和导航控制器之间存在segue,那么@vacawama 提供的答案可以完美运行,并且按钮栏中没有提供后退按钮。可能只是偏好问题。

以上是关于通过 navigationController 使用 segue 传递数据的主要内容,如果未能解决你的问题,请参考以下文章

通过 navigationController 使用 segue 传递数据

通过 NavigationController 传递数据

如何在 iOS 7 中使导航栏透明? [复制]

通过 Segues,确定用户在啥视图上以及 NavigationController 按钮不出现

UINavigationController 如何成为 UITableView 的 navigationController?

NavigationController UIToolbar 更改项