禁用后退按钮导航操作
Posted
技术标签:
【中文标题】禁用后退按钮导航操作【英文标题】:Disable back button navigation action 【发布时间】:2020-10-15 19:58:45 【问题描述】:我有一个home screen
和detail 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
【讨论】:
以上是关于禁用后退按钮导航操作的主要内容,如果未能解决你的问题,请参考以下文章