2010-06-04 134 views
0

你好,UINavigationController后退按钮问题

我有一个混合iPhone应用程序有一个UITabBarController和5个选项卡。每个选项卡托管一个UINavigationViewController,它使用一个根控制器进行初始化,该控制器是托管一个UIWebView的UIViewController。在某个特定的链接上,我推导导航控制器(显示一些本地存储的数据)固有的UITableViewController,并有一个后退按钮。以下是我在解析shouldStartLoadWithRequest:方法中的URL字符串后的代码。

UINavigationController *navControl = (UINavigationController *)self.parentViewController; 
    CartTableViewController *tabView = [[CartTableViewController alloc] init]; 
    [navControl pushViewController:tabView animated:YES]; 
    navControl.navigationBar.hidden = NO; 
    return YES; 

这工作正常。特定的链接被解析并且表格视图被推送到navigationStack上。当我点击后退按钮时(并且是显示'后退'而不是先前视图的名称,也就是说'新闻'),我得到另一个表格视图,但是这次后退按钮被命名为'新闻'。当我点击那个,我回到我的根控制器。我似乎并没有从两个视图的哪个位置通过根视图推送到堆栈。

谢谢。 Zaki

+0

好吧,我发现这个问题。我需要从shouldStartLoadWithRequest返回NO:这样的事情。对不起,麻烦了:$ – zakishaheen 2010-06-04 07:53:45

+0

你应该回答你自己的问题,以防止这个问题显示为未答复。另外,我注意到你在上面的代码中有内存泄漏。你应该在pushViewController之后释放tabView。导航控制器将保留它。 – 2010-06-04 12:08:54

回答

0

好的,我发现了这个问题。我需要从shouldStartLoadWithRequest返回NO:这样的事情。对不起,烦扰

0

您的webView:shouldStartLoadWithRequest:navigationType实现可能被调用两次。如果一个实例不在UINavigationController栈中,一种解决方案是只创建并推送一个CartTableViewController的实例。

if (![navControl.topViewController isKindOfClass:[CartTableViewController class]]) { 
    CartTableViewController *tabView = [[[CartTableViewController alloc] init] autorelease]; 
    [navControl pushViewController:tabView animated:YES]; 
    navControl.navigationBar.hidden = NO; 
} 

你也应该释放你的tabView实例。