UITabbarController 设置视图

Posted

技术标签:

【中文标题】UITabbarController 设置视图【英文标题】:UITabbarController setting view 【发布时间】:2010-08-21 12:16:51 【问题描述】:

我有一个由 Interfacebuilder 设置的 UITabbarController。 tabbarcontroller有5个tab,第一个是欢迎页面,第二个是UITableViewController。两者都有一个 NavigationController。第二个选项卡应显示类别列表。 当我启动应用程序时,一切都很好。当我按下第二个选项卡时,它会使用导航控制器完美加载视图。 但我想要做的是能够使用第一个选项卡中的链接在第二个选项卡中加载某个类别。

所以我所做的就是在我的 appDelegate 中添加了以下函数,并从我的第一个选项卡中的视图中调用:

- (void)loadCategoryViewUsingCategoryId:(NSString*)categoryId

    CategoryViewController *categoryView = [[CategoryViewController alloc] initWithLoadingCategoryUsingCategoryId:categoryId];

    if (!categoryView) 
        UIAlertView *errorView;
        errorView = [[UIAlertView alloc]
                     initWithTitle: NSLocalizedString(@"Whoops", @"oddsAppAppDelegate")
                     message: NSLocalizedString(@"I did not found the requested category. Sorry!", @"oddsAppAppDelegate")
                     delegate: self
                     cancelButtonTitle: NSLocalizedString(@"Close", @"oddsAppAppDelegate") otherButtonTitles: nil];
        [errorView show];
        [errorView autorelease];
    
    else 
        self.tabBarController.selectedIndex = 1;

        self.tabBarController.selectedViewController = categoryView;
        [self.tabBarController.selectedViewController setTitle:@"apa"];
        [self.tabBarController.selectedViewController viewDidLoad];
    

这很好用,但是......当第二个选项卡加载时,它没有导航控制器工具栏。如何加载它以保留导航控制器工具栏?

顺便说一下,“CategoryViewController”是UITableViewController

最好的问候, 保罗·皮伦

【问题讨论】:

【参考方案1】:

导航栏默认是可见的。如果你想直接访问它

[[self navigationController] setNavigationBarHidden:NO];

我认为您的问题出在其他地方。如果你像这样分配你的控制器

UITabBarController *theTabBar = [[UITabBarController alloc]init];
YourWelcomeViewClassHere *welcome = [[YourWelcomeViewClassHere alloc] initWithNibName:@"YourWelcomeViewClassHere" bundle:nil]; //Or other custom initalizers
UINavigationController *welcomeNav = [[UINavigationController alloc] initWithRootViewController:welcome];
CategoryViewController *category = [[CategoryViewController alloc] initWithNibName:@"CategoryViewController" bundle:nil]; //Or other custom initalizers
UINavigationController *categoryNav = [[UINavigationController alloc] initWithRootViewController:category];
/*
Your other View controllers initializations
*/

NSArray *viewControllers = [[NSArray alloc] initWithObjects:welcomeNav,categoryNav,/* other viewControllers ,*/nil];
[theTabBar setViewControllers:viewControllers];

这可能会起作用并显示您的观点。

【讨论】:

嗨,我试过了,但它对我来说真的不起作用。再一次,你的帖子让我开始思考并给了我以下解决方案:self.tabBarController.selectedIndex = 1; UINavigationController *nav = [self.tabBarController.viewControllers objectAtIndex:1]; nav.viewControllers = [[NSArray alloc] initWithObjects:categoryView, nil];这对我有用。问候,保罗·皮伦

以上是关于UITabbarController 设置视图的主要内容,如果未能解决你的问题,请参考以下文章

将容器控制器(根视图控制器)设置为 UITabBarController 中视图控制器的委托

在 UITabbarController 中设置视图控制器的委托

hide / show UITabBarController的.tabBar(用于root视图控制器)[复制]

UITabBarController 与我的 splashsceen 并行运行

在推送的 UITabBarController 上设置徽章

UITabBarController 中的测试方法正确设置标题