如果我使用 prepareForSegue 传递数据,则无法嵌入导航控制器

Posted

技术标签:

【中文标题】如果我使用 prepareForSegue 传递数据,则无法嵌入导航控制器【英文标题】:Can't embed in navigation controller if I am passing data with prepareForSegue 【发布时间】:2014-12-11 11:54:56 【问题描述】:

我正在开发一个自定义相机应用程序,我在其中以模态方式呈现 3 个视图控制器。在每个 segue 中,我使用 prepareForSegue 函数传递数据。我的问题是在相机工作完成后,我需要再显示 2 个视图控制器,这些视图控制器需要位于导航控制器中。

我已经意识到,如果我不传递任何数据,导航控制器就可以正常工作。但是,当我传递数据时,应用程序在运行时崩溃。这样做的正确方法是什么?

这是我为 segue 函数做的准备;

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    if segue.identifier == "camera2Crop"
        let controller: CropViewController = segue.destinationViewController as CropViewController
        controller.photoTaken = self.photoTaken
    

其中photoTaken 是一个UIImage 对象。此外,这是我放置导航控制器的故事板的屏幕截图。我将CustomCameraViewController 中的prepareForSegue 函数调用到CropViewController

编辑:我已将 prepareForSegue 更改为以下代码;

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    if segue.identifier == "camera2Crop" 
        let controller: CustomNavigationController = segue.destinationViewController as CustomNavigationController
        controller.photoTaken = self.photoTaken

    

现在应用程序没有崩溃,但我不知道如何通过导航控制器发送对象

【问题讨论】:

您可以在共享数据的地方共享一段代码吗?我认为您正在尝试将值传递给 ui 对象。 我已经编辑了我的帖子。您还需要其他什么来了解问题所在吗? 【参考方案1】:
let controller: CropViewController = segue.destinationViewController as CropViewController

仔细检查segue.destinationViewController 是否真的是导航视图控制器。

如果是导航控制器,则从中获取CropViewController

if segue.identifier == "camera2Crop" 
    let navController = segue.destinationViewController as UINavigationController
    let controller = navController.viewControllers[0] as CropViewController
    controller.photoTaken = self.photoTaken

请注意,您不必继承 UINavigationController。

【讨论】:

它不是导航视图控制器。所以这就是问题所在。我想我应该使用 UIImage 变量创建导航视图控制器的子类,并通过导航视图控制器传递 photoTaken 对象。对吗? 非常简单的答案,很高兴我不必继承 UINavigationController。谢谢。

以上是关于如果我使用 prepareForSegue 传递数据,则无法嵌入导航控制器的主要内容,如果未能解决你的问题,请参考以下文章

通过 prepareForSegue 传递 NSString - Swift

使用 prepareForSegue 在视图控制器之间传递数据

使用 PrepareForSegue 方法从 UITableView 传递到另一个

如何使用 prepareForSegue 从 UIButton 传递字符串

使用 UISearchBar 使用 prepareForSegue 传递 indexPath.row 时遇到问题

如何使用 prepareForSegue 从二维数组传递值