UINavigationController后退按钮问题

发布于 2024-09-04 08:22:12 字数 788 浏览 3 评论 0原文

你好,

我有一个混合 iPhone 应用程序,有一个 UITabBarController 和 5 个选项卡。每个选项卡都托管一个 UINavigationViewController,该 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上。当我单击后退按钮时(是的,它显示“后退”而不是上一个视图的名称,即“新闻”),我会得到另一个表视图,但这次后退按钮被命名为“新闻”。当我点击它时,我回到我的根控制器。我似乎没有找到两个视图从哪里通过根视图推送到堆栈上。

谢谢。 扎基

HEllo,

I have a hybrid iPhone application that has a UITabBarController and 5 Tabs. Each tab hosts a UINavigationViewController initialized with a root controller that is a UIViewController hosting one UIWebView. On a certain specific link, I push a UITableViewController inherent on the navigation Controller (which shows some data stored locally) and has a back button. Following is the code after i parse the URL string in shouldStartLoadWithRequest: method.

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

This works fine. The specific link is parsed and the table view is pushed onto the navigationStack. When i click the back button though (and yes it shows 'back' rather than previous view's name which is, say 'news') i get another table view but this time the back button is named 'news'. and when i click on that, i go back to my rootcontroller. I don't seem to find from where are two views pushed onto the stack over root view.

Thanks.
Zaki

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

粉红×色少女 2024-09-11 08:22:12

您的 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 实例。

Your implementation of webView:shouldStartLoadWithRequest:navigationType is probably being called twice. One solution would be to only create and push an instance of CartTableViewController if an instance isn't already on the UINavigationController stack.

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

You should also be releasing your tabView instance too.

回首观望 2024-09-11 08:22:12

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

Okay i found the issue. I need to return NO from shouldStartLoadWithRequest: for such a thing. Sorry for the bother

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文