拉动刷新视图时,不能触发触发

时间:2018-09-23 14:10:33

标签: ios swift pull-to-refresh

我想使用“拉动刷新” 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)

    })

}

这是当我导航回父视图时的屏幕快照(通过消除模态视图)。“卡住”刷新控件视图在顶部可见。

enter image description here

2 个答案:

答案 0 :(得分:0)

只需添加

refreshControl?.endRefreshing()

使用您的viewWillAppear方法


我只是在下面的情节提要中尝试了以下方法,效果很好……

class TableViewController: UITableViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        refreshControl?.endRefreshing()        
    }

    @IBAction func unwind(sender: UIStoryboardSegue) {            
    }
}

enter image description here

答案 1 :(得分:0)

好的,我找到了解决方案。 @Ashley Mills的回答给了我一个主意。在viewWillAppear中,我呼叫refreshControl.beginRefreshing(),然后立即呼叫refreshControl.endRefreshing(),这行得通!

由于某些原因,仅调用refreshControl.endRefreshing()是不够的。