UITavBarController内部的UINavigationController问题,未调用viewWillAppear [英] Problems with UINavigationController inside of UITabBarController, viewWillAppear not called

查看:105
本文介绍了UITavBarController内部的UINavigationController问题,未调用viewWillAppear的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

As an overview, I'm having issues with a UINavigationController inside of a UITabBarController calling viewWillAppear whenever a view is popped from the stack.

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

From the delegate, a UITabBarController is made programmatically:

// 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推入堆栈。

My newsFeedNavigationController is just a subclassed UITableViewController (and the subclass is not interfering with viewWillAppear, as it's never called in newsFeedNavigationController). In it, items that when clicked will push a new UIViewController into the stack.

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

The problem is that whenever views are popped off the stack, viewWillAppear is never called in newsFeedNavigationController, and the items in the list remain highlighted. I've been messing with this for a few hours am at the point where I need some help to find out what I am doing wrong.

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

In my newsFeedNavigationController, I tried to add an NSLog to see if it is called or I did something, but it is never even called.

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

修改:

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

Okay, now here is something weird I noticed:

如果我跑:

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

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

and then dismiss it, viewWillAppear begins to work properly when popping and pushing views... So now I am stumped. It's not really a solution but maybe an inside of something that is going on.

推荐答案

为了回答我自己的问题,我发现了问题是什么。

To answer my own question, I found out what the problem was.

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

In order to abide by Apple's "No UITabBarController inside of a UINavigationController" I wrote my own tab bar controller (bookTabBarController) which is based off of a standard View Controller. My problem was that the class wasn't passing viewDidAppear down to the class that managed the view controllers, so it never knew it was being shown or not.

这篇关于UITavBarController内部的UINavigationController问题,未调用viewWillAppear的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆