当使用带有initWithNavigationBarClass的NavigationController设置时,如何在rootViewController中为CustomToolbar设置委托:toolbarClass:
在我的代码中,我正在执行以下操作:
RootViewController *rootViewController = [[RootViewController alloc] initWithClassName:kFTPostClassKey];
UINavigationController *navController = [[UINavigationController alloc] initWithNavigationBarClass:[CustomNavigationBar class] toolbarClass:[CustomToolbar class]];
[navController setViewControllers:@[rootViewController] animated:NO];
// Present the Home View Controller
[self presentViewController:navController animated:YES completion:NULL];
在'RootViewController'中,我试图设置工具栏的委托,以便检测项目被点击的时间。
[self.navigationController.toolbar setDelegate:self];
当我这样做时,我得到一个例外:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Cannot manually set the delegate on a UIToolbar managed by a controller.'
我查看了文档,并了解到在UINavigationController管理工具栏时无法设置委托。我的问题是:如果我无法设置委托,如何在RootViewController中检测CustomToolbar上的点击?
我还要感谢一些更深层次的解释,因为我是新人并且不确定这一切是如何起作用的。
答案 0 :(得分:0)
我的猜测是,为了工作,navigationController
必须是navigationBar
delegate
。这就是为什么在navigationBar
中使用delegate
navigationController
时无法设置navigationBar
UINavigationBarDelegate
。
当您使用UINavigationController
的子类时,您可以尝试使用rootViewController
的子协议添加navigationBarWasSelected方法。
在新的NSNotification
子类中,您可以实现此方法,以便在单击导航时立即使用NSNotificationCenter
。
或者,在您的自定义导航栏中,您可以在RootViewController
中发送{{1}},并在{{1}}中抓住它。