【问题标题】: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
        }
    }
}

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

【问题讨论】:

  • 代码不足。根据你所拥有的,它应该可以工作,但它没有,所以我们需要查看更多

标签: ios swift iphone xcode navigation


【解决方案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
    }
    

    【讨论】:

      猜你喜欢
      • 2017-06-25
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      相关资源
      最近更新 更多