在UITabbar的“更多”视图上选择索引

时间:2011-03-20 00:48:59

标签: iphone uitabbar

如何在UITabBar的“更多”视图中管理用户选择?我有这个代码来管理UITabBarItems选择:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {    
    if (!(viewController == tabBarController.moreNavigationController)) {
        int index = tabBarController.selectedIndex;
        [[DataManager sharedInstance] setCurrentTabbarIndex:index];
    }
}

它适用于可见的UITabBarItems,但是当用户从“更多”视图中选择一些项目时,我从未得到过相关信息。有没有办法捕获“更多”视图的用户项目选择?谢谢!

4 个答案:

答案 0 :(得分:2)

UITabBarController的“more”视图与其他视图分开处理。 Apple对此主题的讨论如下:

  

['moreNavigationController']属性始终包含有效的更多导航控制器,即使屏幕上未显示“更多”按钮也是如此。 您可以使用此属性的值在选项卡栏界面中选择更多导航控制器,或将其与当前选定的视图控制器进行比较

     

请勿手动将存储在此属性中的对象添加到标签栏界面。更多控制器由标签栏控制器根据需要自动显示。您还必须不在viewControllers属性中存储的视图控制器数组中查找“更多”导航控制器。标签栏控制器不包括该对象数组中的更多导航控制器。

从这一点来看,我认为你可以这样做:

int index = tabBarController.selectedIndex;
if (tabBarController.selectedViewController == 
    tabBarController.moreNavigationController) {
    index = -1;  //assign some placeholder index for the "More" controller
}

答案 1 :(得分:2)

对于一个非常古老的问题,这是一个非常晚的答案,但无论如何,无论如何,如果有人偶然发现这个问题。

解决方案是将自己指定为“更多”导航控制器的代理。您已经有一个采用UITabBarControllerDelegate协议的类,因此.h文件可能如下所示:

@interface MyDelegate : NSObject <UITabBarControllerDelegate, UINavigationControllerDelegate>
{
}

无论您将班级指定为代表,请执行以下操作:

- (void) assignDelegate:(MyDelegate)myDelegate toTabBarController:(UITabBarController*)tabBarController
{
  tabBarController.delegate = myDelegate;
  tabBarController.moreNavigationController.delegate = myDelegate;
}

最后,在你的委托类中添加这个方法:

- (void) navigationController:(UINavigationController*)navigationController didShowViewController:(UIViewController*)viewController animated:(BOOL)animated
{
     // add code to handle the event
}

请注意,以编程方式更改选项卡时,不会调用任何委托方法。

答案 2 :(得分:1)

我发现此问题的最佳方法是成为UITableView的委托,UITabView是UITabBarController.moreViewController中的topViewController。 实现didSelectRowAtIndexPath应该可以解决问题!

Stuart Sharpe在他的博客中描述了最好(也是最安全)的实现:http://initwithstyle.net/2014/02/making-more-of-the-more-view/

答案 3 :(得分:0)

无论选择哪种观点,都会收到viewWillAppear:animated:

在每个由标签栏控制的视图中提供此功能,即使从“更多”控制器进行制作,您也可以提取用户选择的标识。

您可以在此方法中保存标签栏状态,或者您可以通过参考标签栏提供视图,并通知 it

相关问题