从子视图调用父视图控制器功能

时间:2016-09-13 20:27:15

标签: ios swift viewcontroller subview

我有一个带有两个子视图控制器的父ViewController。

当我加载父视图控制器时,它将显示两个子视图。我也可以向左或向右滑动以滑动子视图。我现在需要在子视图上添加一个按钮。点击按钮后,它应自动滑动到下一个子视图。

这就是我的计划 - 在子视图控制器上放置一个按钮。点击按钮将调用负责滑动的父视图控制器中的函数。现在我无法调用父视图控制器的功能。我需要父视图控制器的当前实例。 有人可以帮忙吗?

在图片上,灰色是子视图viewcontroller 1 绿色是subview viewcontroller 2。 点击viewcontroller1的按钮应该滑动到viewcontroller 2

Please click here for screen print

2 个答案:

答案 0 :(得分:1)

我能想到两种解决方案:

  1. 使您的按钮成为父视图控制器的子视图;如果您希望按钮成为其中一个子视图控制器视图的子视图,这显然不起作用;
  2. 要扩展@ NazmulHasan的建议,您可以为子视图控制器实现自定义协议。以子视图控制器1为例,您只需要为该类声明一个委托协议。这告诉编译器视图控制器的委托必须实现哪些功能以满足协议。所以你会做这样的事情:

    协议childViewControllerOneDelegate {     func buttonWasPressed(sender:UIButton) - >空虚 {

  3. 您还需要向子视图控制器添加属性,如下所示:

    var myDelegate : childViewControllerOneDelegate!
    

    这是一个隐式解包的可选项,因为在初始化类时无法设置委托;你设定它,我将在下面概述。

    在父视图控制器类声明的最顶层,然后声明视图控制器符合此协议:

    class parentViewController : UIViewController, childViewControllerOneDelegate ... Etc, etc {
    

    当您从父视图控制器初始化childViewControllerOne时,您可以在之后直接添加一行说明:

    myChildViewControllerOne.delegate = self
    

    最后,回到您的按钮和子视图控制器,您只需向其中添加一个调用以下内容的操作:

    self.myDelegate.buttonWasPressed(self.button)
    

    这将触发父视图控制器中的方法,您可以执行任何操作。

    希望有所帮助。与这些答案一样,我正在尝试将大量信息压缩到一个小空间中,如果您有任何疑问,请给我留言。一切都好!

答案 1 :(得分:0)

您可以使用交叉引用。在初始化之后,您必须将父viewController的弱引用传递给子进程。

相关问题