提问者:小点点

禁用后退按钮导航操作


我有一个主屏幕详细屏幕。 从主屏幕,我使用推送导航和移动到详细屏幕

在我的详细信息屏幕中,我有一个返回按钮,可以返回到主屏幕。 因为我确实从主屏幕推送了。 这个场景运行良好。

但是当用户点击后退按钮时,如果某些条件匹配,我不想将屏幕移回我的主屏幕。 如果得分计数为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
        }
    }
}

当我尝试这个,我仍然能够回到主屏幕轻点后退按钮。 我怎么能呆在同一屏幕上。

任何帮助都很好。

谢谢


共3个答案

匿名用户

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

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() {
}

匿名用户

您应该创建后退按钮操作函数,并使用您的代码:

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)
    }
}

或者诸如此类的。

匿名用户

您需要将标识符添加到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
}