UIRefreshControl在以编程方式触发时不刷新

时间:2015-02-16 20:45:37

标签: ios swift uirefreshcontrol

我试图在视图加载时显示一个刷新控件,以显示我从Parse获取数据。应用程序运行时,刷新控件可以正常工作,但我无法从应用程序的任何位置以编程方式启动它。 这是似乎无法运行的代码:

 override func viewDidAppear(animated: Bool) {
    self.refresher.beginRefreshing()
 }

这不仅不会运行,而且应用程序中的代码会更改刷新控件的属性。当我在应用程序中使用此代码并显示用户交互的更新时,刷新控件不会像通常那样具有其属性标题,也不会运行它应该的代码。

2 个答案:

答案 0 :(得分:5)

我需要在setContentOffset和self.refreshControl?.sendActions(for: .valueChanged)调用之间添加延迟。没有延迟,refreshControl的attributesTitle将无法呈现。

这适用于iOS 10(Swift 3):

self.tableView.setContentOffset(CGPoint(x:0, y:self.tableView.contentOffset.y - (self.refreshControl!.frame.size.height)), animated: true)

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.2, execute: {
  self.refreshControl?.sendActions(for: .valueChanged)
})

答案 1 :(得分:4)

这是一个适用于10.3的扩展程序:

extension UIRefreshControl {
    func refreshManually() {
        if let scrollView = superview as? UIScrollView {
            scrollView.setContentOffset(CGPoint(x: 0, y: scrollView.contentOffset.y - frame.height), animated: false)
        }
        beginRefreshing()
        sendActions(for: .valueChanged)
    }
}