是否可以在UITabBarController上设置协调器属性



我正试图在基于选项卡的应用程序中实现一个滑出菜单。我有一个容器控制器,它容纳MenuViewController和UITabBarController,并且它符合MasterDelegate协议,该协议在按下位于单个选项卡上的汉堡按钮时告诉容器滑出MenuView控制器。我的问题是,直到配置了UITabBarController之后,才设置UITabBarController的协调器属性,因此UITabBarController中的属性以及包含按钮的选项卡的ViewController中的属性始终为零。

这是属于设置UITabBarController的容器的代码:

func configureHomeController() {
centerController = MainTabBarController()
// Make sure to set delegate of homeController
centerController.masterDelegate = self
print("MainContainterController: Setting the MainTabBarController delegate")
if centerController.masterDelegate != nil {
print("MainContainerController: MainTabBarController Delegate set")
}
view.addSubview(centerController.view)
// Add the navigationController containing the HomeController as a child to the ContainerController
addChild(centerController)
// Home controller didMove to the parent container of self, which is the ContainerController
centerController.didMove(toParent: self)
}

在TabBarController中,有一个打印语句在配置TabBarController后执行,该语句告诉我masterDelegate属性是否为nil。这是在容器控制器打印上述两条语句之前打印的。由于打印了第二份打印声明,我知道正在设置协调员,但设置得太晚了。

我的问题是,在配置UITabBarController之前,如何设置masterDelegate?或者有没有一种方法可以在事后设置该属性?

为您的tabbarcontroller创建一个方便的init并将委托传递给它

convenience init(masterDelegate: MasterDelegate) {
self.init(nibName: nil, bundle: nil)
self.masterDelegate = masterDelegate
}

当你设置TabBarController时,像这样实例化它:

centerController = MainTabBarController(masterDelegate: self)
centerController.configure()

此外,在MainTabBarController中创建一个配置函数。在那里,设置您的视图控制器。

(in MainTabBarController)
func configure() {
viewControllers = [viewController, viewController2, ....]
}

最新更新