拉刷新不执行刷新功能?

Posted

技术标签:

【中文标题】拉刷新不执行刷新功能?【英文标题】:Pull to refresh not performing refreshing function? 【发布时间】:2016-11-10 05:49:54 【问题描述】:

我正在编写一个应用程序并设置了 queryAndAppend 函数,用于查询数据库并将提取的信息附加到一组数组(然后用于遍历表视图中的单元格)。查询函数在viewDidLoad() 中调用时可以正常工作。我想要一个拉动刷新功能来额外调用这些功能(从而更新表格单元格),但它不能正常工作。以下是相关代码:

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()

            )

        

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

【问题讨论】:

你使用 tableviewcontroller 吗?你能显示 myQueryandAppend 代码吗? 你试过看***.com/questions/24475792/…吗? @Sahil 原来问题在于,因为我没有使用tableViewController,而是在常规VC中使用tableView,所以我需要额外的代码行:tableView.addSubview(refreshControl) .凯文提供的链接帮助很大。 是的。如果您不使用 tableviewcontroller,则需要添加 tableView.addSubview(refreshControl)。 【参考方案1】:

如果类是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)

【讨论】:

【参考方案2】:

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

tableView.RefreshControl = refreshControl

【讨论】:

以上是关于拉刷新不执行刷新功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何在网页中用html+js实现手机里下拉刷新的功能?请教高手

Obj-C - 添加活动指示器以下拉刷新?

怎么刷新页面后,js就不执行了

执行异步功能后如何刷新页面[关闭]

Android 下拉刷新上拉载入效果功能

表拉刷新不起作用