拉动刷新不执行刷新功能?

时间:2016-11-10 05:49:54

标签: ios swift uiviewcontroller uirefreshcontrol

我正在编写应用程序并设置queryAndAppend函数来查询数据库并将拉出的信息附加到一组数组(然后用于在表视图中迭代单元格)。查询函数在viewDidLoad()中调用时可以正常工作。我想要一个pull to refresh函数来额外调用函数(从而更新表格单元格),但它无法正常工作。以下是相关代码:

var refreshControl = UIRefreshControl()
    override func viewDidLoad() {
            super.viewDidLoad()

            myQueryandAppend(completion: {
                self.tableView.reloadData()
            })

            upComingQueryandAppend(completion: {
                self.tableView.reloadData()
            })

            refreshControl = UIRefreshControl()
            refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
            refreshControl.addTarget(self, action: #selector(MainPageVC.refresh(_:)), for: UIControlEvents.valueChanged)

        }
        func refresh(_ sender: AnyObject){

            myQueryandAppend(completion: {
                self.tableView.reloadData()
                self.refreshControl.endRefreshing()

            })
            upComingQueryandAppend(completion:{

                self.tableView.reloadData()
                self.refreshControl.endRefreshing()

            })

        }

不完全确定为什么它不能正常工作,因为我在不同的视图控制器(具有不同的查询/追加功能)中进行了非常类似的设置,可以通过拉动刷新来正常工作。

2 个答案:

答案 0 :(得分:2)

如果课程为UIViewController但不是UITableViewController,则需要手动将refreshControl作为子视图添加到tableView

tableView.addSubview(refreshControl)

所以,viewDidLoad()应如下所示:

override func viewDidLoad() {
    super.viewDidLoad()


    myQueryandAppend(completion: {
        self.tableView.reloadData()
    })

    upComingQueryandAppend(completion: {
        self.tableView.reloadData()
    })

    refreshControl = UIRefreshControl()
    refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
    refreshControl.addTarget(self, action: #selector(MainPageVC.refresh(_:)), for: UIControlEvents.valueChanged)
    // here is the extra job!
    tableView.addSubview(refreshControl)
}

答案 1 :(得分:2)

在iOS 10+中,您可以直接将刷新控件分配给tableview / scrollview的.RefreshControl属性

tableView.RefreshControl = refreshControl