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

use*_*436 7 ios swift

我有一个容器视图,它根据用户的操作在内部执行几个 segue。我还有一个顶级 UIView,我想从容器视图 segue 中控制它并设置它的状态。

我尝试使用协议以及以下方法为家庭控制器设置委托:

 if let parent = self.parent as? HomeController { 
        parent.handleTopBarState(state: .web)
 }
Run Code Online (Sandbox Code Playgroud)

我想要发生的是当我在一个特定的视图控制器上时,设置父视图控制器的顶部栏视图的状态。

谢谢。

Amm*_*eeb 6

如果您添加了子视图控制器,那么您只需使用 self.parent 即可访问。确保将它放入 if let 和 cast

if let parent = self.parent as? ParentViewController {
        parent.resetItemsCollectionView()
    }
Run Code Online (Sandbox Code Playgroud)


Fah*_*mov 4

如果您在另一个视图控制器上嵌入了视图控制器,则可以通过多种方式向其父视图控制器发送消息。

  1. 在子(嵌入)视图控制器中,您可以引用父视图控制器。为故事板中的嵌入segue提供标识符,var在子级中声明父级的类型,并在prepare(for segue: UIStoryboardSegue, sender: Any?)函数上分配父级,并调用父级的任何公共方法。
  2. 创建协议,让父进程确认协议,在子进程中创建协议的var,在 进程中将父进程设置为子进程的协议对象prepare(for segue: UIStoryboardSegue, sender: Any?),并在需要时调用协议方法。
  3. 只需将通知发布到NotificationCenter子级上,然后观察父级上的通知即可。的文档NotificationCenter在这里您可以找到使用它的简短示例。

希望这可以帮助!

PS:你也可以在父vc中观察子属性,如果你想要这样,我可以解释。