上下文:我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
方法上调用一个方法,因为用户也可以退出UIViewController
with interactivePopGestureRecognizer
。
谢谢!