UINavigationItem 后退按钮返回到上一个导航项,但视图没有改变

Posted

技术标签:

【中文标题】UINavigationItem 后退按钮返回到上一个导航项,但视图没有改变【英文标题】:UINavigationItem back button returns to previous navigationitem, but view doesn't change 【发布时间】:2009-10-03 23:23:47 【问题描述】:

我有一个添加导航栏并显示新视图的“didSelectRowAtIndexPath”操作。新视图中有一个动作将另一个视图推送到导航堆栈上,它可以工作,但单击“返回”不会恢复以前的视图。

顺序基本上是:

用户点击表格单元格 出现导航栏,下方有新视图,显示一些带有链接的 html 用户点击一个链接,新视图和一个后退按钮被添加到导航中 用户点击后退按钮,导航正确回滚,但视图没有改变

通过捕获对链接的点击来添加新视图,如下所示:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType 
if(navigationType == UIWebViewNavigationTypeLinkClicked) 
    UINavigationItem *navigationItem = [[UINavigationItem alloc] initWithTitle:@"webpage"];
    [flipsideNavigationBar pushNavigationItem:navigationItem animated:YES];
    [navigationItem release];

    WebViewController *viewController = [[WebViewController alloc] initWithNibName:@"webView" bundle:nil];
    UIView *webPageView = self.webViewController.view;
    [webPageView addSubview:viewController.view];
    [webPageView insertSubview:flipsideNavigationBar aboveSubview:viewController.view];
    [[viewController.view.subviews objectAtIndex:1] loadRequest:request];
    [webView stopLoading];
    return YES;

return YES;

我不确定我做错了什么;应该发生的是“后退”按钮应该关闭当前视图并返回到前一个视图。任何人都可以建议任何尝试吗?

谢谢!

约翰

【问题讨论】:

【参考方案1】:

推荐的方法是使用UINavigationController 并将UIViewControllers 压入堆栈,无论是模态的还是非模态的。

如果您希望坚持使用您的自定义解决方案,您应该为您的UINavigationBar 设置一个delegate 并实现其shouldPopItem:didPopItem: 方法。 Documentation link

【讨论】:

感谢您提供的好信息。它需要进行一些重写,但现在它可以工作了。

以上是关于UINavigationItem 后退按钮返回到上一个导航项,但视图没有改变的主要内容,如果未能解决你的问题,请参考以下文章

检测长按 UINavigationItem 的后退按钮

设置 uinavigationitem 的后退按钮不起作用

带有 Webview 的片段利用硬件后退按钮转到上一个网页

以编程方式使后退按钮转到上一个视图

链接到上一个 Flutter 的后退按钮

导航到上一个视图控制器,默认后退按钮不起作用