在“更多”部分中,didSelectViewController不会被调用

我有一个UITabBarController,我已经设置了它的委托方法didSelectViewController ,因为我感兴趣的是被选中的标签的索引。

但是,我注意到didSelectViewController方法不会被调用,当用户在“更多”部分(当有更多的选项卡可以显示在标签栏中):

有问题的部分

有没有办法让我得到用户从正在自动创build的表中select的项目的通知?

我发现我在这个问题上需要什么。

基本上,您为更多选项卡中显示的导航控制器设置了UITabBarControllerDelegate UINavigationControllerDelegate 。 之后,您将检测用户是否触摸了其中一个可见选项卡或“更多”选项卡。

编辑

此外,要直接操作“更多”导航控制器中可见的表格,您可以设置一个“中间人”表格视图委托,拦截对原始委托的调用。 看下面的didSelectViewController里面的代码:

 if (viewController == tabBarController.moreNavigationController && tabBarController.moreNavigationController.delegate == nil) { // here we replace the "More" tab table delegate with our own implementation // this allows us to replace viewControllers seamlessly UITableView *view = (UITableView *)self.tabBarController.moreNavigationController.topViewController.view; self.originalDelegate = view.delegate; view.delegate = self; } 

之后,只要在其他委托中调用相同的方法,我们可以自由地在委托方法中做任何你喜欢的事情(实际上我检查了原始委托响应的方法,唯一实现的委托方法是didSelectRow:forIndexPath: 。 看下面的例子:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // this is the delegate for the "More" tab table // it intercepts any touches and replaces the selected view controller if needed // then, it calls the original delegate to preserve the behavior of the "More" tab // do whatever here // and call the original delegate afterwards [self.originalDelegate tableView: tableView didSelectRowAtIndexPath: indexPath]; }