禁用后退按钮导航操作

Posted

技术标签:

【中文标题】禁用后退按钮导航操作【英文标题】:Disable back button navigation action 【发布时间】:2020-10-15 19:58:45 【问题描述】:

我有一个home screendetail screen。从home screen 我使用push 导航并移动到detail screen

在我的detail screen 中,我有一个返回按钮可以返回home screen。因为我从home screen 做了push。此方案运行良好。

但是当用户点击后退按钮时,如果某些条件匹配,我不想将屏幕移回主屏幕。假设我有一个称为价值得分的按钮。如果分数为 0。那么我不希望用户返回。如果它大于 1,那么如果用户点击后退按钮,他们可以移动到主屏幕。

所以我做到了:

override func viewWillDisappear(_ animated: Bool) 
    super.viewWillDisappear(animated)
    if self.isMovingFromParent 
        if count > 0 
           // Dont move , just stay in same screen
         else 
           // Move to back home screen
        
    

尝试此操作时,我仍然可以通过单击后退按钮返回主屏幕。我怎样才能留在同一个屏幕上?

【问题讨论】:

代码不足。根据你所拥有的,它应该可以工作,但它没有,所以我们需要查看更多 【参考方案1】:

您可以尝试在导航控制器中添加自定义后退按钮。

func setupCustomBackBtn() 
    
    let navBackBtn = UIButton(type: .system)
    navBackBtn.addTarget(self, action: #selector(backBtnAction), for: .touchUpInside)
    navBackBtn.setImage(UIImage(named: "customBack"), for: .normal)
    
    navBackBtn.frame = CGRect(x: -20, y: 0, width: 32, height: 32)
    let customBackBarBtn = UIBarButtonItem(customView: navBackBtn)
    navigationItem.leftBarButtonItem = customBackBarBtn
    



@objc func backBtnAction() 

【讨论】:

我需要使用导航栏后退按钮。不是我的自定义按钮。这就是要求,有可能吗? 我不知道任何其他方法,但我的 hack 100% 有效。【参考方案2】:

您应该创建返回按钮操作功能并使用您的代码:

if self.isMovingFromParent 
    if count > 0 
       // Dont move , just stay in same screen
     else 
       // Move to back home screen
    

在那个函数中。

@IBAction func tapOnBackButton() 
    if count == 0 
        self.dismiss(animated: true, completion: nil)
    

或类似的东西。

【讨论】:

【参考方案3】:

你需要给pop Segue添加标识符

override func shouldPerformSegueWithIdentifier(identifier: String?, sender: AnyObject?) -> Bool 
    if let ident = identifier 
        if ident == "YourIdentifier" 
            if count > 0 
                // Dont move , just stay in same screen
                return false
            
            else 
                // Move to back home screen
                return true
            
        
    
    return true

【讨论】:

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

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

UITableViewControler 中未设置导航栏标题和未禁用后退按钮

禁用单个 ViewController 的后退导航

在基于导航控制器的应用程序的最终视图中隐藏或禁用后退按钮

动态禁用导航按钮和标签栏

使用 AngularJS/Javascript 仅禁用浏览器后退按钮导航(不是应用程序中的链接)