首页 > 解决方案 > 尝试滑动弹出当前 viewController 时的确认提示

问题描述

在执行弹出操作之前,我必须确保用户知道他将丢失编辑视图控制器中的修改。为此,我正在创建一个闭包,如果弹出应该继续还是应该被阻止,它将返回与决定相对应的真/假。

问题是当用手势滑动弹出我遇到意外的行为:viewWillDisappear 被调用,但控制器没有消失。viewDidDisappear 永远不会被调用。此外,屏幕被冻结,但我可以按 tabBar 项目在另一个控制器中跳回。回到当前选项卡项时,视图控制器已经弹出,但最终,我会遇到其他冻结。

你能看到任何解决方案吗?谢谢!

// 来自自定义导航控制器的代码

var popHandler: (() -> Bool)?

override func popViewController(animated: Bool) -> UIViewController?
{
    guard self.popHandler?() != false else
    {
        return nil
    }
    self.popHandler = nil
    return super.popViewController(animated: animated)
}

//来自编辑控制器的代码

func setupPopHandler() {
    guard let navigationController = self.navigationController as? MyCustomNavController else {
        return
    }
       
    navigationController.popHandler = { [weak self] in
        
        guard let self = self else { return true }
        
        if self.hasChangedFields() && self.hasUnsavedWork == true {
            
            let alert = UIAlertController(title: "Info", message: "You have unsaved changes", preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "Save", style: .default, handler: { action in
                // Call save method which will pop the VC after saving
            }))
            alert.addAction(UIAlertAction(title: "Dismiss", style: .cancel, handler: { action in
                self.hasUnsavedWork = false
                self.navigationController?.popViewController(animated: true)
            }))

            self.present(alert, animated: true)
            
            return false
            
        } else {
            return true
        }
    }
}

标签: iosswift

解决方案


推荐阅读