【问题标题】: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 代码吗?
  • @Sahil 原来问题在于,因为我没有使用tableViewController,而是在常规VC中使用tableView,所以我需要额外的代码行:tableView.addSubview(refreshControl) .凯文提供的链接帮助很大。
  • 是的。如果您不使用 tableviewcontroller,则需要添加 tableView.addSubview(refreshControl)。

标签: ios swift uiviewcontroller uirefreshcontrol


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2018-01-15
      • 2011-09-17
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      • 2015-05-14
      • 2018-04-01
      • 1970-01-01
      相关资源
      最近更新 更多