iphone – UITabBarController内部的UINavigationController问题,未调用viewWillAppear

作为概述,每当从堆栈中弹出视图时,我都会遇到UITabBarController内部的UINavigationController问题,并调用viewWillAppear.

从委托中,以编程方式创建UITabBarController:

// Create views for Tab Bar
    UINavigationController *view1   = [[UINavigationController alloc] initWithRootViewController:[[newsFeedNavigationController alloc] initWithStyle:UITableViewStylePlain]];
    resizedTabBatItem *tabBarItem1 = [[resizedTabBatItem alloc] initWithTitle:nil image:[UIImage imageNamed:@"newspaper.png"] tag:0];
    [view1 setTabBarItem:tabBarItem1];
    [tabBarItem1 release];

    UIViewController *view2   = [UIViewController new];
    resizedTabBatItem *tabBarItem2 = [[resizedTabBatItem alloc] initWithTitle:nil image:[UIImage imageNamed:@"speechbubble.png"] tag:1];
    [view2 setTabBarItem:tabBarItem2];
    [tabBarItem2 release];

....

// Create the tab bar controller
    bookTabBarController = [BookTabBarController new];
    [[bookTabBarController view] setFrame:CGRectMake(0, 0, 320, 460)];

    // Add the views to it
    NSArray *viewControllers = [NSArray arrayWithObjects:view1, view2, view3, view4, view5, nil];

    [[bookTabBarController tabBarController] setViewControllers:viewControllers];

我的newsFeedNavigationController只是一个子类UITableViewController(并且子类不会干扰viewWillAppear,因为它从未在newsFeedNavigationController中调用).在其中,单击的项目将新的UIViewController推入堆栈.

问题是,无论何时从堆栈弹出视图,都不会在newsFeedNavigationController中调用viewWillAppear,并且列表中的项目仍然会突出显示.在我需要一些帮助来找出我做错了什么的时候,我已经把这个搞乱了几个小时.

在我的newsFeedNavigationController中,我试图添加一个NSLog来查看它是否被调用或者我做了什么,但它甚至从未调用过.

- (void)viewWillAppear:(BOOL)animated {
    NSLog(@"is viewWillAppear called?");
    [super viewWillAppear:animated];
}

编辑:

好的,现在我注意到这里有些奇怪:

如果我跑:

[self presentModalViewController:(any UIview) animated:YES];

然后解雇它,viewWillAppear在弹出和推送视图时开始正常工作……所以现在我很难过.这不是一个真正的解决方案,但可能是一个正在发生的事情的内部.

为了回答我自己的问题,我发现了问题所在.

为了遵守Apple的“在UINavigationController中没有UITabBarController”,我编写了自己的标签栏控制器(bookTabBarController),它基于标准的View Controller.我的问题是该类没有将viewDidAppear传递给管理视图控制器的类,因此它从未知道它是否被显示.

相关文章
相关标签/搜索