2016-11-10 112 views
2

我正在編寫一個應用程序,並設置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() 

      }) 

     } 

不能完全確定爲什麼它不工作,因爲我有一個非常類似的設置,不同的視圖控制器(帶不同的查詢/添加功能)與拉刷新工作正常。

+0

使用tableviewcontroller嗎?並且你能顯示myQueryandAppend代碼嗎? – Sahil

+1

你有沒有試過看着https://stackoverflow.com/questions/24475792/how-to-use-pull-to-refresh-in-swift-2?noredirect=1&lq=1? – Kevin

+0

@Sahil事實證明,問題在於,由於我沒有使用'tableViewController',而是在普通的VC中使用'tableView',我需要額外的代碼行:'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) 
} 
1

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

tableView.RefreshControl = refreshControl