UITableViewController 未调用 viewWillAppear、viewDidAppear 等

Posted

技术标签:

【中文标题】UITableViewController 未调用 viewWillAppear、viewDidAppear 等【英文标题】:UITableViewController not calling viewWillAppear, viewDidAppear, etc 【发布时间】:2012-07-07 21:26:32 【问题描述】:

我在 UITabBarController 中有一组五个 UINavigationController。问题是只有一些 UINavigationControllers 有 viewWillAppear: 在它们各自的 UITableViewControllers 中调用。

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

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

只有一些 UITableViewController 调用 viewWillAppear 和 viewDidAppear,而那些调用它的 UITableViewController 并没有为视图的每种显示方式调用它。有些仅在我推送到视图时调用它,有些仅在我弹出到视图时调用,有些仅在我将选项卡切换到视图时调用。

什么会导致问题只出现在一些 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...

我不会覆盖与在选项卡视图中选择项目有关的任何事情,也不会在每个选项卡的根目录下对导航控制器进行子类化。

【问题讨论】:

如果不了解您是如何将这些东西连接到代码中,就很难说出问题所在。 【参考方案1】:

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

例如:

tempNavController.delegate = self;

【讨论】:

(哎呀。5 分钟编辑规则)这非常失败。我将 UITabBarController 设置为 UINavigationControllerDelegate。在 -(void)navigationController: willShowViewController:animated: 然后我调用 [viewController viewWillAppear:YES];不调用 viewWillAppear 的视图控制器仍然不调用,而那些连续调用它四五次的视图控制器。我认为找到解决方案的原因在于一些 UIViewControllers 运行正常而圆顶则没有。如果你能帮我弄清楚那将是很棒的!【参考方案2】:

原来我忘记在 viewWillAppear:、viewDidLoad 和 viewDidAppear: 中调用“[super viewWillAppear:animated]”。 如果可以,请始终回调超类。

【讨论】:

以上是关于UITableViewController 未调用 viewWillAppear、viewDidAppear 等的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewController 未调用 viewWillAppear、viewDidAppear 等

UITableviewcontroller 中的 UITableview - 重新加载时未调用 cellforrowatindexpath

使用情节提要时未调用 UITableViewController 覆盖初始化函数

UITableViewController scrollViewDidScroll:在删除单元格期间未调用

在 UITabBarController 内未调用 cellForRowAtIndexPath

未调用 cellForRowAtIndexPath