如何使用带有initWithNavigationBarClass的NavigationController设置在rootViewController中的CustomToolbar上设置委托:toolbarClass:

时间:2014-10-05 07:11:15

标签: ios objective-c uinavigationcontroller delegates uitoolbar

当使用带有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上的点击?

我还要感谢一些更深层次的解释,因为我是新人并且不确定这一切是如何起作用的。

1 个答案:

答案 0 :(得分:0)

我的猜测是,为了工作,navigationController必须是navigationBar delegate。这就是为什么在navigationBar中使用delegate navigationController时无法设置navigationBar UINavigationBarDelegate

当您使用UINavigationController的子类时,您可以尝试使用rootViewController的子协议添加navigationBarWasSelected方法。 在新的NSNotification子类中,您可以实现此方法,以便在单击导航时立即使用NSNotificationCenter

或者,在您的自定义导航栏中,您可以在RootViewController中发送{{1}},并在{{1}}中抓住它。