从Swift中的另一个类刷新UITableView
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Swift中的另一个类刷新UITableView相关的知识,希望对你有一定的参考价值。
我的目标是:
我有一个类getData
,用于从服务器下载数据,然后将其保存到阵列。之后,我希望班级getData
能够更新cellTableView
中的HomeViewController
。
如果我在一个快速文件中有所有func
它可以工作。但我想多次使用它并且不在每个UIViewController
中使用相同的代码,我也想知道如何使用委托。
我尝试使用this回答类似的问题。
问题的探析:
现在代码下载和存储但不更新cellTableView
。
HomeViewController:
import UIKit
class HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, GetDataDelegate {
let getData = GetData()
...
override func viewDidLoad() {
super.viewDidLoad()
cellTableView.delegate = self
cellTableView.dataSource = self
cellTableView.register(UINib(nibName: "HomeCell", bundle: nil), forCellReuseIdentifier: "homeCell")
for (n, _) in MyVariables.coinTickerArray.enumerated() {
MyVariables.dataArray.append(HomeLabel(coinNameCell: MyVariables.coinNameArray[n], tickerCell: MyVariables.coinTickerArray[n]))
}
getData.storeData()
}
...
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let coinCell = tableView.dequeueReusableCell(withIdentifier: "homeCell", for: indexPath) as! HomeCell
...
return coinCell
}
...
@IBAction func refreshButtonPressed(_ sender: UIBarButtonItem) {
getData.storeData()
self.didFinishGetData(finished: true)
}
@IBAction func currencyControlPressed(_ sender: UISegmentedControl) {
...
getData.storeData()
}
}
的GetData:
import UIKit
import Alamofire
import SwiftyJSON
class GetData {
var delegate: GetDataDelegate?
func downloadData(url: String, number: Int) {
...
}
func updateCoinData(json: JSON, number: Int) {
...
self.delegate?.didFinishGetData(finished: true)
}
func storeData () {
for (n, _) in MyVariables.coinTickerArray.enumerated() {
MyVariables.finalURL = MyVariables.baseURL+MyVariables.coinTickerArray[n]+MyVariables.currentCurency
downloadData(url: MyVariables.finalURL, number: n)
}
}
}
查看+ GetDataDelegate:
import Foundation
extension HomeViewController: GetDataDelegate {
func didFinishGetData(finished: Bool) {
guard finished else {
// Handle the unfinished state
return
}
self.cellTableView.reloadData()
}
}
GetDataDelegate:
import Foundation
protocol GetDataDelegate {
func didFinishGetData(finished: Bool)
}
是否调用了didFinishGetData?我认为不是因为tableview没有重新加载。在您粘贴的代码中,您没有将getData委托设置为等于HomeViewController,在本例中为HomeViewController。将此代码添加到viewDidLoad,它应该工作:
getData.delegate = self
如果这不起作用,那么你需要添加更多的代码,因为我无法告诉调用updateCoinData的时刻,这会调用你的委托方法。
我无法从您发布的代码中判断出cellTableView的声明。我相信每个cellTableView的实例都应该用tableView替换。您在dataSource中调用tableView并委托方法,然后使用cellTableView重新加载数据。
你还应该更多地考虑代表团。这是一个艰难的概念,最初获得,但一旦你得到它这样的任务将是轻而易举的。
以上是关于从Swift中的另一个类刷新UITableView的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Swift SpriteKit 中的另一个 SKScene 访问变量
如何初始加载 UITableView 然后观察 Firebase 节点以更改在 Swift 中刷新 tableview?
是否可以根据从 Swift 中的 UIViewController 继承的类中的另一个来初始化变量?