如何从另一个类调用执行 segue 方法?

Posted

技术标签:

【中文标题】如何从另一个类调用执行 segue 方法?【英文标题】:How to call perform segue method from another class? 【发布时间】:2017-04-06 06:29:14 【问题描述】:

我想执行从 View BView C 的 segue,并且我正在调用 class A 中的方法。 我在 B 类中的 segue 方法是-

//ViewController B


func nextViewAction() -> Void  
        self.performSegueWithIdentifier("nextview", sender: self)
    

我在 A 类中这样称呼它-

//ViewController A



@IBAction func sideMenuAction(sender: AnyObject) 

        ViewClassB().nextViewAction()

但它崩溃了-由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“Receiver () has no segue with identifier 'nextview'”

【问题讨论】:

【参考方案1】:

您是否为控制器 B 和控制器 C 之间的 segue 设置了名称 nextview?您可以通过单击两个控制器之间的 segue 进行检查,然后检查 Attributes Inspector 中的 Identifier 值。

【讨论】:

是的,一样。 下一个视图 你能把项目分享给我,让我看看发生了什么吗?【参考方案2】:

您可以通过跳过第二个视图控制器从第一个视图控制器移动到第三个视图控制器,使用下面的代码..

class MyViewController: UIViewController, UINavigationControllerDelegate 

var viewControllerToInsertBelow : UIViewController?

override func viewDidLoad() 
    super.viewDidLoad()
    self.navigationController?.delegate = self


func pushTwoViewControllers() 
    if let viewController2 = self.storyboard?.instantiateViewControllerWithIdentifier("id1"),
        let viewController3 = self.storyboard?.instantiateViewControllerWithIdentifier("id2")  //change this to your identifiers
            self.viewControllerToInsertBelow = viewController2
            self.navigationController?.pushViewController(viewController3, animated: true)
    


//MARK: - UINavigationControllerDelegate
func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) 
    if let vc = viewControllerToInsertBelow 
        viewControllerToInsertBelow = nil
        let index = navigationController.viewControllers.indexOf(viewController)!
        navigationController.viewControllers.insert(vc, atIndex: index)
    

参考:SO Post

【讨论】:

请记住,我根本没有使用UINavigationController 请阅读Is it possible to push a view controller without navigation controller?【参考方案3】:

不需要做任何其他代码,只需使用 通知观察者它将解决您的问题。

谢谢

【讨论】:

【参考方案4】:

我认为你不能从 AViewController 触发 segue 动作,因为什么 performSegue 所做的是:

Initiates the segue with the specified identifier from the current view controller's storyboard file.

尝试实现从 A 到 C 的 segue

【讨论】:

以上是关于如何从另一个类调用执行 segue 方法?的主要内容,如果未能解决你的问题,请参考以下文章

使用辅助函数从另一个类执行 Segue

如何从另一个类中调用 onItemClick 方法?

如何从另一个类调用@selector 方法

如何从另一个类调用方法函数?

如何从另一个类调用非静态抽象方法

从另一个班级表演segue