ios - 在 viewWillDisappear 上显示 SVProgressHUD
问题描述
上下文:我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
。
谢谢!
解决方案
推荐阅读
- c++ - SFINAE 是否依赖于类型扣除?
- ios - 在 SpriteKit 场景之间传递数据 (Swift)
- postgresql - 我们正面临“恐慌:无法从控制文件中读取:成功
- php - Joomla!- 将类添加到菜单中的标签
- javascript - Symfony 复选框默认选中,但如果在持久化后未选中则不会
- javascript - Jestjs如何测试在另一个函数中调用的函数
- c - 在 Ubuntu 16.04 上找不到 printf.c
- mongodb - 通过 libmongoc 运行 shell 方法?
- html - 如何使用 flexbox 对列表项进行排序?
- java - 如果条件不为空,则 SQL 请求