UITableViewController不调用viewWillAppear,viewDidAppear等

时间:2012-07-07 21:26:33

标签: ios cocoa-touch uinavigationcontroller uitabbarcontroller uitableview

我在UITabBarController中有一组五个UINavigationControllers。问题是只有部分UINavigationControllers具有viewWillAppear:在各自的UITableViewControllers中调用。

我目前的设置是: (一切都是以编程方式创建的)

                        |
                tabBarController
              (UITabBarController)
                        |
        ---------------------------------------- ...etc...
        |                              |
tempNavController               tempNavController      <--- Secondary NavContr
(UINavigationController)      (UINavigationController)      Not subclassed
        |                              |
scheduleViewController        currentViewController
(UITableViewController)       (UITableViewController)
        |                              |
        ...more UITableViewControllers...

只有部分UITableViewControllers正在调用viewWillAppear和viewDidAppear,并且那些执行的操作不是为视图出现的每种方式调用它。有些只在我推到视图时调用它,有些只在我弹出视图时调用,有些只在我将标签切换到视图时调用。

导致问题的原因只出现在某些UITableViewControllers而不是所有这些中?为什么只有一些方式可以出现?所有选项卡和表格都以相同的方式设置。

编辑:这是我用来设置标签的代码:

- (void)viewDidLoad
{
    //Setup of two of the tabs
    //Create navigation controller and root view for each tab
    //Current Comps
    CurrentCompsViewController *tempCurrentCompsViewController = [[CurrentCompsViewController alloc] init];
    [tempCurrentCompsViewController setAProgram:self.currentProgram];
    self.currentCompsviewcontroller = [[UINavigationController alloc] initWithRootViewController:tempCurrentCompsViewController];

    //Comp List
    CompetitionListViewController *tempCompListViewController = [[CompetitionListViewController alloc] init];
    [tempCompListViewController setAProgram:self.currentProgram];
    self.competitionListViewController = [[UINavigationController alloc] initWithRootViewController:tempCompListViewController];

     //Create and add tabBarItems
    UITabBarItem *compListITem = [[UITabBarItem alloc] initWithTitle:@"Competitions" image:[UIImage imageNamed:@"CompsIcon.png"] tag:6];
    [self.competitionListViewController setTabBarItem:compListITem];

    UITabBarItem *curentItem = [[UITabBarItem alloc] initWithTitle:@"Current Comps." image:[UIImage imageNamed:@"CurrentIcon.png"] tag:7];
    [self.currentCompsviewcontroller setTabBarItem:curentItem];

    //Add everything to tab array, and sort tabs... etc...
}

我不会覆盖任何与选项卡视图中的项目相关的内容,也不会在每个选项卡的根目录下继承导航控制器。

2 个答案:

答案 0 :(得分:0)

尝试手动设置每个UINavigationController的委托?

例如:

tempNavController.delegate = self;

答案 1 :(得分:0)

原来我忘了在viewWillAppear:,viewDidLoad和viewDidAppear中调用“[super viewWillAppear:animated]”。 你可以随时回电给超级班。