【问题标题】:How to access variables from one controller to another controller如何从一个控制器访问变量到另一个控制器
【发布时间】:2017-03-23 05:02:09
【问题描述】:

大家好,我正在使用 swift 2.2 开发一个应用程序,我在第一个视图控制器中声明了一个变量,我想在第二个视图控制器中访问它。我搜索了其他堆栈溢出答案,没有任何支持。

在我的第一个视图控制器中:

class firstViewController: UIViewController{

var timer:nstimer?
//performed some functions using nstimer
}

现在我想停止计时器,并在第二个视图控制器中保留按钮操作,所以我想访问变量 timer。如何访问??

我在堆栈溢出之前搜索了要求使用 prepare for segue 的答案,但已经获得了一些连接并对其他控制器执行了 segue。

现在正在寻找访问该变量的解决方案。谁能帮我解决这个问题??

提前致谢。

【问题讨论】:

  • 使用情节提要标识符并准备segue会对项目造成任何问题??
  • 因为我使用了许多视图控制器并且在视图控制器之间使用了许多 segues
  • 不!它不会产生任何问题。在 prepareforsegue 中,您可以检查标识符名称。但请记住,两个标识符名称不应相同。
  • 无需从第二个 ctrlr 访问 timer var。设置一个委托,第一个 ctrlr 中的实现停止计时器。所以从第二个 ctrlr 调用 delegate.stopTimer()。顺便说一句,移动 Swift 3 更好

标签: ios swift swift2 var


【解决方案1】:

FirstController

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if segue.identifier == "segueidentifier" {

     if let destVc = segue.destinationViewController as? SecondViewController {
      destVc.timer = self.timer
    }
 }
}

SecondViewController 中创建一个计时器属性并使用它。

var timer: NSTimer?

如果您在连接时遇到问题。试试这个

通过 ctrl + 拖动在 FirstViewController 和 SecondViewController 之间创建 segue 并连接到 second 并为 segue 标识符命名

【讨论】:

  • 如果 segue.identifier == "segueidentifier"
  • if segue.identifier == "segueidentifier" .here 我必须给出什么标识符..??
  • 你需要点击segue并在右侧给出标识符名称google.co.in/…
  • 没有像segue这样的选项....只有show和custom....可以使用storyboard id吗??
  • 检查我更新的答案。以及更多codingexplorer.com/segue-swift-view-controllers
【解决方案2】:

您的第二个 ViewController 不应该知道有关第一个视图控制器的任何信息,如果知道,那么您基本上将两个 VC 绑定在一起。

您需要做的就是通过上面建议的@Sahil 传递引用(尽管我会避免这样做,因为第一个 VC 可能不会期望来自外部源的更改),或者使用委托模式。

使用委托模式,您可以为第二个 VC 提供对第一个 VC 的弱引用,并使第一个 VC 符合第二个 VC 定义的协议。委托模式已经解释过很多次了,所以我只是给你一个链接而不是在这里再次解释它:http://useyourloaf.com/blog/quick-guide-to-swift-delegates/

委托模式是最安全的选项,它允许第一个 VC 以预期的方式控制计时器,而不是让它在外部进行修改,因此我建议探索该选项,而不是传递对计时器的引用。

【讨论】:

  • @antonyraja 在我发布的链接中有一个示例。它从一个整体上解释了委托概念,以便您了解发生了什么。
猜你喜欢
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
  • 2016-05-30
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
相关资源
最近更新 更多