如何从一个控制器访问变量到另一个控制器

时间:2016-11-09 11:36:02

标签: ios swift swift2 var

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

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

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation

fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)

def init():
    line.set_data([], [])
    return line,

def animate(i):
    theta = np.linspace(0, 2 * np.pi, 100)
    r = np.sqrt(np.abs(np.sin(0.1 * i)))
    x = r * np.cos(theta) + 1
    y = r * np.sin(theta)
    line.set_data(x, y)
    return line,

anim = animation.FuncAnimation(fig, animate, init_func=init, frames=200, interval=20, blit=True)

plt.show()

现在我想停止计时器,我在第二个视图控制器中保持按钮动作,所以我想访问变量timer.how来访问?

我在要求使用准备segue的堆栈溢出答案之前进行了搜索,但是已经给出了一些连接并且已经执行了segue到其他控制器。

现在正在寻找访问变量的解决方案。任何人都可以帮我解决这个问题吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

var updateName = $scope.editedName; var fruitId = $scope.mainId; var fruit_desc=$scope.description; var Updatepost = {'data':{'_id':fruitId ,'name': updateName, 'descrptn':description}}; grocerystore.updatefruitList(Updatepost,function(err,response){ console.log('able to access'); }); $state.go('app.mainList');

FirstController

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { if segue.identifier == "segueidentifier" { if let destVc = segue.destinationViewController as? SecondViewController { destVc.timer = self.timer } } } 中创建一个计时器属性并使用它。

SecondViewController

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

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

enter image description here

答案 1 :(得分:0)

你的第二个ViewController不应该知道关于第一个视图控制器的任何信息,如果确实如此,那么你基本上将两个VC连接在一起。

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

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

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