我想使用“拉动刷新” UI动作来触发模式视图的选择。动作正常,按预期触发了模态搜索。但是当我关闭模态时,刷新控件视图仍然可见。
我在segue之前正确调用了refreshControl.endRefreshing()
,但是问题似乎是UI没时间在segue触发之前没有时间完成关闭刷新控制视图的动画,所以它很烂半路。
如果我在触发segue之前稍加延迟(0.4秒),则这种帮助会有所帮助,因为它可以使动画完成,但感觉就像是骇客。另外,如果用户在表视图上拉得很慢,并在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)
})
}
这是当我导航回父视图时的屏幕快照(通过消除模态视图)。“卡住”刷新控件视图在顶部可见。
答案 0 :(得分:0)
只需添加
refreshControl?.endRefreshing()
使用您的viewWillAppear
方法
我只是在下面的情节提要中尝试了以下方法,效果很好……
class TableViewController: UITableViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
refreshControl?.endRefreshing()
}
@IBAction func unwind(sender: UIStoryboardSegue) {
}
}
答案 1 :(得分:0)
好的,我找到了解决方案。 @Ashley Mills的回答给了我一个主意。在viewWillAppear
中,我呼叫refreshControl.beginRefreshing()
,然后立即呼叫refreshControl.endRefreshing()
,这行得通!
由于某些原因,仅调用refreshControl.endRefreshing()
是不够的。