【问题标题】:Perform Segue From Another Swift File via a class function [closed]通过类函数从另一个 Swift 文件执行 Segue [关闭]
【发布时间】:2015-02-03 04:09:25
【问题描述】:

如果我实现的类函数没有连接到 viewController,我如何使用我实现的类函数来执行 segue?

【问题讨论】:

  • 如果它是一个类级别的函数,那么无论您在何处导入该类都可以使用它,而无需创建实例。在您的IBOutlet 中,致电YourClass.function()
  • @IanMacDonald 我有这个功能。我希望被调用的函数执行转场。这可能吗?
  • 根据定义,类函数与类的特定实例无关,因此无法访问performSegue... 等实例方法或storyboard 等实例属性建议重新考虑为什么你有一个类函数而不是一个实例函数。尽管听起来您确实拥有安东尼奥的答案中使用的实例函数。
  • @David 我选择使用类函数来避免在我的视图控制器中包含大量不必要的代码。需要从不同视图多次运行的代码。

标签: ios swift


【解决方案1】:

为了执行转场,您需要转场所在的视图控制器实例 - 例如:

class MyViewController {
}

class MyClass {
    showNextView(fromViewController: UIViewController) {
        fromViewController.performSegueWithIdentifier("segue_id", sender: fromViewController)
    }
}

但是我不鼓励这种互动。不要告诉视图控制器如何显示视图 - 让它自己做,然后问它。

所以,我建议在您的视图控制器中创建一个实例方法:

class MyViewController {
    ...
    func goToNextView() {
       performSegueWithIdentifier("segue_id", sender: self)
    }
}

并用它来进行过渡:

class MyClass {
    showNextView(fromViewController: MyViewController) {
        fromViewController.goToNextView()
    }
}

【讨论】:

  • 嗨,我有一个带 moveToScreen() 函数的 HomViewController,如下所示: func moveToScreen(){ self.performSegueWithIdentifier("ListReport", sender: self) } 。我设置了“ListReport”标识符。现在,当我创建一个文件时: class Build { let home = HomViewController() home.moveToScreen() } 崩溃并出现错误: has no segue with identifier 'ListReport' 。为什么会崩溃?
  • @Antonio fromViewController.goToNextView() 在 MyClass 中永远不会被调用。我将打印语句放在花括号内,没有打印出来。
  • @Antonio ,我在这里发布了一个问题 stackoverflow.com/questions/42458405 ,如果您能帮助我,我将不胜感激。谢谢
【解决方案2】:

您可以使用“performSegueWithIdentifier”指示当前可见的视图控制器进行 segue。

您显然需要对可见控制器的引用。

在你的方法中使用:

currentViewController.performSegueWithIdentifier("push", sender: currentViewController)

【讨论】:

  • 我正在调用不在 viewController 中的类函数。我如何通过调用我的函数来执行 segue。例如。 licenseAgent.checkLicense() 在该函数中我想检查许可证,如果它不存在,我希望注销使用。
  • 您必须将当前视图控制器的引用注入到该函数/类并调用其“performSegueWithIdentifier”方法
猜你喜欢
  • 2017-12-27
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
  • 1970-01-01
  • 2018-06-17
  • 2016-09-20
  • 1970-01-01
  • 2012-03-10
相关资源
最近更新 更多