簡體   English   中英

Swift-在刷新控件中禁用默認重載TableView

[英]Swift - disable default reload tableview in refresh control

我有UIViewController擁有tableview作為子視圖。 我分配了刷新控件,以便刷新數據。

        refreshControl = UIRefreshControl()
        refreshControl.attributedTitle = NSAttributedString(string: "Loading...")
        refreshControl.addTarget(self, action: #selector(getTableViewData), for: .valueChanged)
        tableView.refreshControl = refreshControl

在getTableViewData內部,我有多個API調用來接收要加載到tableview中的基本數據。 在getTableViewData函數的末尾,我有一行代碼可以重新加載tableview。

問題在於,只要刷新控件檢測到下拉列表,它似乎就會觸發重新加載表視圖。 我想禁用此默認下拉重載,以便我可以首先收集所有基本數據,然后重載。 無論如何,無論如何我都可以禁用默認重載嗎?

在getTableViewData內部,代碼如下:

var fetchGroup = DispatchGroup()
@objc func getReceipts(){
    self.refreshControl.beginRefreshing()
    self.dataSet1.removeAll()
    self.dataSet2.removeAll()
    self.dataSet3.removeAll()

    fetchGroup.enter()
    fetchGroup.enter()
    fetchGroup.enter()

    if let fetch1URL = URL(string: "fetchDataSet1", relativeTo: Property.baseURL){
        let headers: HTTPHeaders = [
            "Authorization": Property.shared.token,
            "content-type": "application/json"
        ]
        Property.alamofireManager.request(fetch1URL, headers: headers).responseJSON{ response in
            //Append json data into dataSet1 here...
            self.fetchGroup.leave()
        }
    }else{
        self.fetchGroup.leave()
    }

    if let fetchURL2 = URL(string: "fetchDataSet2", relativeTo: Property.baseURL){
        let headers: HTTPHeaders = [
            "Authorization": Property.shared.token,
            "content-type": "application/json"
        ]
        let params: Parameters = [
            "Temp":""
        ]
        Property.alamofireManager.request(fetchURL2, parameters: params, headers: headers).responseJSON{ response in
            //Append json data into dataSet2 here...
            self.fetchGroup.leave()
        }
    }else{
        self.fetchGroup.leave()
    }

    if let fetch3URL = URL(string: "fetchDataSet3", relativeTo: Property.baseURL){
        let headers: HTTPHeaders = [
            "Authorization": Property.shared.token,
            "content-type": "application/json"
        ]
        let params: Parameters = [
            "Temp":""
        ]
        Property.alamofireManager.request(fetch3URL, parameters: params, headers: headers).responseJSON{ response in
            //Append json data into dataSet3 here...
            self.fetchGroup.leave()
        }
    }else{
        self.fetchGroup.leave()
    }

    fetchGroup.notify(queue: .main, execute: {
        self.refreshControl.endRefreshing()
        print("Going to Refresh")
        self.tableView.reloadData()
    })
}

謝謝!

您可以使用調度組進行API調用。 借助調度組,可以在呼叫完成時通知您。 通話結束后,您可以檢查是否有任何錯誤。 如果沒有錯誤,您可以在單元格中重新加載數據。

請檢查此鏈接以供參考: https : //dispatchswift.com/introduction-to-dispatch-group-a5cf9d61ff4f

默認情況下,當您將UIRefreshControl添加到UITableView ,當您下拉tableView時,刷新控件將設置動畫並刷新,並且如果您通過操作將目標添加到刷新控件中,則將調用選擇器的方法。

如果要手動觸發數據獲取,則不應將任何目標添加到刷新控件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM