【发布时间】:2016-11-04 07:29:15
【问题描述】:
我有一个以编程方式创建的rightBarButtonItem,我想触发导航控制器的模态序列。导航控制器是我的编辑视图控制器场景的“根视图控制器”。
这是一个example of what I'm talking about,除了这里的按钮是在情节提要中创建的,因此您可以从情节提要中的按钮控制并拖动转场。这就是我说的结构
HomeVC --(modal)--> Navigation Controller --(root view)--> EditVC
我无法在情节提要中插入rightBarButtonItem,因此我必须以编程方式创建一个made the segue to the Navigation Controller following this answer。
我在这里的目的是呈现一个模态屏幕来编辑一个对象,所以我需要通过导航控制器将该对象从我的 HomeVC 传递到我的 EditVC 中。第一个链接中的示例是创建一个对象,因此不需要传递任何内容。
这就是我现在的位置。我的 HomeVC(简化名称以便于理解)有一个导航栏,其中有一个以编程方式创建的 rightBarButtonItem,其选择器调用了一个函数:
func editButtonPressed() {
// doesn't call prepareForSegue unless I prepend super.
super.performSegueWithIdentifier("ShowEdit", sender: self)
}
我的问题在于我的 prepareForSegue 函数:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
print("this one prints")
if segue.identifier == "ShowEdit" {
print("this one prints")
// prints out the UINavigationController, not the EditVC
print("segue: \(segue.destinationViewController)")
if let editViewController = segue.destinationViewController as? EditViewController {
// THIS IS WHAT I WANT TO ACCOMPLISH
editViewController.selectedObject = selectedObject
print("DOES NOT PRINT")
} else {
print("this one prints")
}
}
因此,如果您能看到我在做什么,我想将对象从 HomeVC 传递到 EditVC,但我的 segue 目前正在导航根视图控制器。如何通过导航控制器将其传递给 EditVC?
我想为导航控制器创建一个控制器,所以它会是myNavVC.selectedObject == selectedObject,然后在 myNavVC 的 prepareForSegue 中使用EditVC.selectedObject == selectedObject 传递它,但是由于它是根视图,我将使用什么作为标识符?
【问题讨论】:
-
你确定destVC是editVC吗?
-
所以现在 destVC 是导航控制器,它是 editVC 的根视图,这就是它不进入
if let editViewController...的原因。请参阅我的最后一段了解我想要做什么,但不知道如何做。