快速从单独的视图控制器调用函数

Posted

技术标签:

【中文标题】快速从单独的视图控制器调用函数【英文标题】:Calling functions from separate view controllers in swift 【发布时间】:2016-07-23 14:31:28 【问题描述】:

我认为解决这个问题需要使用委托,但我不熟悉如何使用它们。 所以在我的项目中,我的主要viewcontroller/storyboard 包含一个UIScrollViewUIScrollview 调用另一个故事板 (xib file) 作为子视图。另一个故事板(xib file)由另一个 swift 文件控制。

我的问题是,当我在另一个故事板中调用一个动作时,我如何从主 viewcontroller 调用一个函数。就像说第一个 viewcontroller 中的 viewdidload。 我不能让整个事情成为一个全局函数,它需要留在它的类中。所以如果我尝试做ViewController.viewDidLoad() 它需要(我认为)一个实例变量或其他东西。

谢谢。

【问题讨论】:

【参考方案1】:

你可以试试:

    在其他类型为 UIViewController 的类中使用弱变量(属性) 在其他视图初始化后将父视图控制器分配给该属性

关于弱引用、强引用、无主引用 Here 和 Here 的好读物

【讨论】:

【参考方案2】:

首先,如果你想用上面所说的类名来调用它,用“class”声明你的方法。所以它就像Java中的静态一样。它使得在项目中的任何地方调用它都变得通用。做一个单独的扩展。

class func myfunc()

如果您想将数据从 B 发送到 A 控制器。您使用所谓的委托。您将 B 的工作交给 A。在 B 之上为您想要执行或发送的功能制定一个协议。在 B 中调用它们。然后在 A 中为这些函数编写代码。这样你就有了从 B 到 A 的数据

否则,您需要通用数据之类的东西。创建一个单例类并在那里初始化属性方法。您可以为此使用对象并在其他控制器中调用它来修改或创建不同的实例。

你不要打电话给viewDidLoad()。顾名思义,它加载一次。如果您希望每次屏幕出现时都进行修改,请使用viewWillAppear

【讨论】:

我知道我可以这样做来使方法静态化。但就我而言,我要调用的静态方法需要有一个 UIScrollview 连接到它。如果不在课堂上,就不会发生这种情况。对?我不知道如何解决这个问题。

以上是关于快速从单独的视图控制器调用函数的主要内容,如果未能解决你的问题,请参考以下文章

如何从单独文件中的另一个视图调用主干视图函数

快速轮函数。无法调用非函数类型“Int”的值

如何从单独的 js 文件中调用角度 $scope 函数? [复制]

Swift:从其他视图控制器调用 PageViewController 中的函数

尝试从外部模态视图控制器调用视图控制器函数时出现致命错误

快速在视图之间传递和调用变量和函数