禁用单个 ViewController 的后退导航

Posted

技术标签:

【中文标题】禁用单个 ViewController 的后退导航【英文标题】:Disable back navigation for single ViewController 【发布时间】:2016-10-30 10:16:33 【问题描述】:

我有以下 VC:

中心的VC是“登录”屏幕,如果用户被授权,它只是将用户重定向到标签栏控制器。

我想禁止从 TabBarController 中的任何 VC 返回 Login VC(使用“返回”按钮和滑动)。

如何做到这一点?

【问题讨论】:

【参考方案1】:

要禁用后退按钮和向后滑动功能,请将此行添加到您的 viewDidLoad 方法中:

self.navigationItem.leftBarButtonItem = nil;
self.navigationItem.hidesBackButton = true;
self.navigationController?.navigationItem.backBarButtonItem?.isEnabled = false;
self.navigationController!.interactivePopGestureRecognizer!.isEnabled = false;

【讨论】:

【参考方案2】:

实际上这种情况的最佳实践是在用户登录时以模态方式呈现登录视图控制器并关闭它。

MainViewController.m

viewWillAppear
   [super viewWillAppear];
   if (!loggedIn)
       //present login view controller
   


-(void)userDidLoggedIn//delegate called after user successfully logged in
   [self dismissViewControllerAnimated:YES completion:nil];

如果你想保持这种行为,那么就使用这个

目标-C:

self.navigationItem.hidesBackButton = YES;

斯威夫特:

self.navigationItem.hidesBackButton = true

【讨论】:

【参考方案3】:
self.navigationItem.hidesBackButton = YES;

【讨论】:

但这不会禁用滑动? 搜索“How to disable back swipe gesture in UINavigationController on ios 7”你会发现很多解决方案。

以上是关于禁用单个 ViewController 的后退导航的主要内容,如果未能解决你的问题,请参考以下文章

如何使用左侧的后退按钮创建导航栏?

如何清除导航堆栈以使后退按钮不出现?

禁用后退按钮导航操作

滑动时禁用网页导航(后退和前进)

是否可以在 iOS 14+ 中禁用后退导航菜单?

在反应导航中禁用后退按钮