UINavigationController后退按钮问题
问题描述:
你好,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
答
好的,我发现了这个问题。我需要从shouldStartLoadWithRequest返回NO:这样的事情。对不起,烦扰
答
您的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实例。
好吧,我发现这个问题。我需要从shouldStartLoadWithRequest返回NO:这样的事情。对不起,麻烦了:$ – zakishaheen 2010-06-04 07:53:45
你应该回答你自己的问题,以防止这个问题显示为未答复。另外,我注意到你在上面的代码中有内存泄漏。你应该在pushViewController之后释放tabView。导航控制器将保留它。 – 2010-06-04 12:08:54