我有一个以编程方式创建的rightBarButtonItem
,我想触发一个模态segue到导航控制器。导航控制器是我的编辑视图控制器场景的“根视图控制器”。
这是一个example of what I'm talking about,除了这里按钮是在故事板中创建的,因此你可以控制 - 从故事板中的按钮拖动segue。这是我正在谈论的结构
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?
我考虑过为Nav Controller创建一个控制器,所以它是myNavVC.selectedObject == selectedObject
,然后在myNavVC的prepareForSegue中用EditVC.selectedObject == selectedObject
传递它,但是我会用它作为标识符根视图?
答案 0 :(得分:3)
在Objective-C中演示:
UINavigationController *navigationController = (UINavigationController*)segue.destinationViewController;
EditViewController *editViewController = (EditViewController *)[[navigationController viewControllers] firstObject];
editViewController.selectedObject = selectedObject;
Swift中的演示:
if let navigationController = segue.destinationViewController as? UINavigationController {
if let editViewController = navigationController.viewControllers.first as? EditViewController {
editViewController.selectedObject = selectedObject
}
}