UINavigationController后退按钮问题

时间:2010-06-04 07:44:32

标签: iphone uinavigationcontroller

您好,

我有一个混合iPhone应用程序,它有一个UITabBarController和5个Tabs。每个选项卡都包含一个使用根控制器初始化的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。当我点击后退按钮时(是的它显示'后退'而不是前一个视图的名称,比如说'新闻')我得到另一个表格视图,但这次后退按钮被命名为“新闻”。当我点击它时,我会回到我的root控制器。我似乎没有找到从根视图中将两个视图压入堆栈的位置。

感谢。 扎基

2 个答案:

答案 0 :(得分: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实例。

答案 1 :(得分:0)

好的,我发现了这个问题。我需要从shouldStartLoadWithRequest返回NO:对于这样的事情。很抱歉打扰