我有一个带有两个子视图控制器的父ViewController。
当我加载父视图控制器时,它将显示两个子视图。我也可以向左或向右滑动以滑动子视图。我现在需要在子视图上添加一个按钮。点击按钮后,它应自动滑动到下一个子视图。
这就是我的计划 - 在子视图控制器上放置一个按钮。点击按钮将调用负责滑动的父视图控制器中的函数。现在我无法调用父视图控制器的功能。我需要父视图控制器的当前实例。 有人可以帮忙吗?
在图片上,灰色是子视图viewcontroller 1 绿色是subview viewcontroller 2。 点击viewcontroller1的按钮应该滑动到viewcontroller 2
答案 0 :(得分:1)
我能想到两种解决方案:
要扩展@ NazmulHasan的建议,您可以为子视图控制器实现自定义协议。以子视图控制器1为例,您只需要为该类声明一个委托协议。这告诉编译器视图控制器的委托必须实现哪些功能以满足协议。所以你会做这样的事情:
协议childViewControllerOneDelegate { func buttonWasPressed(sender:UIButton) - >空虚 {
您还需要向子视图控制器添加属性,如下所示:
var myDelegate : childViewControllerOneDelegate!
这是一个隐式解包的可选项,因为在初始化类时无法设置委托;你设定它,我将在下面概述。
在父视图控制器类声明的最顶层,然后声明视图控制器符合此协议:
class parentViewController : UIViewController, childViewControllerOneDelegate ... Etc, etc {
当您从父视图控制器初始化childViewControllerOne时,您可以在之后直接添加一行说明:
myChildViewControllerOne.delegate = self
最后,回到您的按钮和子视图控制器,您只需向其中添加一个调用以下内容的操作:
self.myDelegate.buttonWasPressed(self.button)
这将触发父视图控制器中的方法,您可以执行任何操作。
希望有所帮助。与这些答案一样,我正在尝试将大量信息压缩到一个小空间中,如果您有任何疑问,请给我留言。一切都好!
答案 1 :(得分:0)
您可以使用交叉引用。在初始化之后,您必须将父viewController的弱引用传递给子进程。