如果我使用 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 传递字符串