0

上下文:我UIViewController正在显示一个编辑配置文件视图,其中包含一些UITextField(名字、姓氏、生日......)。没有“保存按钮”,一旦textFieldDidEndEditing调用,数据库中的值就会更新。

UIViewController如果用户尝试在所有数据库更新完成之前离开,我想显示一个加载视图(我正在使用 SVProgressHUD 库) 。

所以这是我的代码(如果 updateWaitingConfirm 为空,则意味着所有更新都已完成):

override func viewWillDisappear(_ animated: Bool) {
    
    if !updateWaitingConfirm.isEmpty {
        
        self.showSVProgressHUD(message: NSLocalizedString("updateWaiting", comment: ""))
        
        timeToWaitCount = 0
        let group = DispatchGroup()
        group.enter()
        
        checkWaitingConfirmEmpty(group)
        
        group.wait()
        self.dismissSVProgressHUD()
    }
    
    super.viewWillDisappear(animated)
}

func checkWaitingConfirmEmpty(_ group: DispatchGroup) {
    
    DispatchQueue.global(qos: .default).asyncAfter(deadline: .now() + 0.5) {
        self.timeToWaitCount += 0.5
        if self.updateWaitingConfirm.isEmpty || self.timeToWaitCount > self.maxTimeToWaitForUpdates {
            group.leave()
        } else {
            self.checkWaitingConfirmEmpty(group)
        }
    }
}

当所有更新完成时(或超过 maxTimeToWaitForUpdates(10 秒)),group.leave()调用super.viewWillDisappear()

问题是我的视图中没有任何内容,例如,我还尝试编辑文本字段,但它也不起作用。我也尝试view.layoutIfNeeded()在 showSVProgressHUD 之后打电话,但它不起作用。

很高兴知道:我不能只在我的后退按钮touchUpInside方法上调用一个方法,因为用户也可以退出UIViewControllerwith interactivePopGestureRecognizer

谢谢!

4

0 回答 0