ios - 拉动以刷新视图在用于触发 segue 时不会关闭
问题描述
我想使用下拉刷新 UI 操作来触发模式视图的转场。该操作工作正常,按预期触发模态转场。但是当我关闭模式时,刷新控件视图仍然可见。
我refreshControl.endRefreshing()
在 segue 之前正确调用,但问题似乎是 UI 没有时间完成在触发 segue 之前关闭刷新控制视图的动画,所以它被吸到一半。
如果我在触发 segue 之前放置一个小延迟(0.4 秒),这会有所帮助,因为它可以让动画完成,但感觉就像是 hack。此外,如果用户在 tableview 上拉得很慢,并且在 0.4 秒后释放下拉,也会出现同样的问题。
当我关闭模式视图时,如何确保刷新控件不可见?我的想法(但我找不到实现的方法)包括:1)确保关闭刷新控件的动画有时间在触发 segue 之前完成。2)当我关闭模式时,关闭父视图上的刷新控制视图。
我无法让上述任何一个工作。1)延迟有效(有时),但感觉就像一个黑客。使用 2) tableView.reloadData() 仅重新加载 tableview,而不是整个视图,因此刷新控制仍然存在。
任何帮助将不胜感激。
这是实现刷新控件的代码。
lazy var refreshControl: UIRefreshControl = {
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(pullToAddCard(_:)), for: .valueChanged)
return refreshControl
}()
这是由刷新控件触发的代码
@objc func pullToAddCard(_ refreshControl: UIRefreshControl) {
refreshControl.endRefreshing()
delay(0.4, closure: {
self.performSegue(withIdentifier: "segueFromPlaylistDetailToNewCard", sender: self)
})
}
这是我导航回到父视图时的屏幕截图(通过关闭模式视图)。“卡住”的刷新控制视图在顶部可见。
解决方案
只需添加
refreshControl?.endRefreshing()
到你的viewWillAppear
方法
我刚刚使用下面的故事板尝试了以下操作,效果很好……</p>
class TableViewController: UITableViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
refreshControl?.endRefreshing()
}
@IBAction func unwind(sender: UIStoryboardSegue) {
}
}
推荐阅读
- php - 在 PHP 循环中获取数据库表列名重复
- java - 验证单元格时,JTable 单元格编辑不会更改
- matlab - 如何解决 SVM 训练中的性能问题
- python - 如何记录 func_name 和文件名
- excel - 转换十六进制 (AF) 数字
- performance - Nopcommerce 速度问题
- webrtc - Opentok + 自定义音频网络声音创建声学反馈
- sql - oracle sql中的regex_replace
- unit-testing - Xamarin.Forms MVVMLight 应用程序的 Xunit 测试无法正常工作,并且永远不会停止运行
- laravel - 删除不适用于针对 API 的 Vue 路由