从子视图调用父视图控制器函数

3
我有一个父级视图控制器和两个子视图控制器。
当我加载父视图控制器时,它将显示两个子视图。我也可以向左或向右滑动以切换子视图。现在我需要在子视图上添加一个按钮。单击按钮后,它应自动滑动到下一个子视图。
这是我的计划 - 在子视图视图控制器上放置一个按钮。单击该按钮将调用父视图控制器中负责滑动的函数。目前我无法调用父视图控制器的函数。我需要当前的父视图控制器实例。 请问有人能帮忙吗?
在图片上,灰色是子视图视图控制器1,绿色是子视图视图控制器2。 单击viewcontroller1的按钮应滑动到viewcontroller2。 请单击此处查看屏幕截图

你在尝试什么?请分享代码。有任何错误吗?如果有,是什么? - Nazmul Hasan
@NazmulHasan - 三个视图控制器 - VC1、VC2和VC3。 VC1是父视图,VC2和VC3是子视图。 VC1以卡片样式显示VC2和VC3,可以向左或向右滑动(此部分已经实现)。 我想在VC2上放置一个按钮,点击后它会自动滑动到VC3。 - N K
1
也许你可以通过协议完成。 - Nazmul Hasan
1
@NazmulHasan - 我是新手.. 你能提供更多细节吗?如果你想看一下,我已经在问题中添加了一个屏幕截图。 - N K
2个回答

1
我能想到两个解决方案:
  1. 将您的按钮设置为父视图控制器的子视图;如果您希望您的按钮成为其中一个子视图控制器的子视图,则显然不起作用。
  2. 扩展@NazmulHasan的建议,您可以为子视图控制器实现自定义协议。以子视图控制器1为例,您只需要为该类声明一个委托协议。这告诉编译器委托视图控制器必须实现哪些函数以满足协议。所以您可以做这样的事情:
    protocol childViewControllerOneDelegate {
        func buttonWasPressed(sender: UIButton) -> Void
    }

您还需要向子视图控制器添加一个属性,如下所示:
var myDelegate : childViewControllerOneDelegate!

这是一个隐式解包的可选项,因为在类初始化时无法设置委托; 如下所述,您可以设置它。
在您的父视图控制器类声明的顶部,然后声明视图控制器符合此协议:
class parentViewController : UIViewController, childViewControllerOneDelegate ... Etc, etc {

当您从父视图控制器初始化childViewControllerOne时,您可以在之后添加一行代码,如下所示:
myChildViewControllerOne.delegate = self

最后,回到您的按钮和子视图控制器,您只需添加一个调用以下内容的操作即可:
self.myDelegate.buttonWasPressed(self.button)

这将触发父视图控制器中的方法,您可以执行任何需要的操作。
希望能有所帮助。像往常一样,在这些答案中,我试图在一个小空间内压缩很多信息,如果您有任何问题,请给我留言。祝一切顺利!

0

你可以使用交叉引用。在初始化之后,您需要传递父视图控制器的弱引用到子视图控制器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接