我试图从弹出视图控制器调用根视图控制器上的函数。以下功能有效,但似乎应该有更好的方法:
func doSomethingInRoot() {
if let appDelegate = UIApplication.shared.delegate as? AppDelegate,
let currentRoot = appDelegate.window!.rootViewController as? RootViewController {
currentRoot.somefunction()
}
}
在上面的代码中,doSomethingInRoot
将包含在popover中,someFunction
将是RootViewController
的函数。
我正在寻找的是将someFunction
传递给包含上述if let
的其他功能的方法,但问题是currentRoot
仅被指定为{上面的{1}}(即,RootViewController
并不知道它传递了doSomethingInRoot
的方法而不是通用函数。
在写这个问题时,我意识到我可以做以下事情,感觉非常干净,但我仍然很好奇我是否可以将方法作为参数传递给特定的类。
RootViewController
答案 0 :(得分:0)
在弹出窗口视图控制器中,您可以添加这样的属性来保存对someFunction的引用
var rootsSomeFunction: (()->Void)!
然后在创建popover VC时分配引用,无论它是在prepareForSegue
中,还是在从storyboard等实例化之后。我还将getRoot()
移到App Delegate。
popoverVC.rootsSomeFunction = appDelegate.getRoot().someFunction().self
最后,在你的popover视图控制器中,你可以通过属性调用它:
self.rootsSomeFunction()