Я написал класс, который позволяет мне просто создавать несколько tableView. Когда я вызываю этот класс в первый раз, все работает хорошо. Но когда я меняю некоторые данные и перезагружаю таблицу, ничего не меняется.
Образец кода:
class TestViewController: UIViewController {
var arrData = ["a","b","c"]
var myTableView: MyTableView?
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
myTableView = MyTableView(table: tableView, data: arrData)
}
@IBAction func buttonTapped(_ sender: UIButton) {
arrData = ["d","e","f"]
myTableView!.tableView.reloadData() //=> Not change anything
}
}
class MyTableView: NSObject, UITableViewDataSource {
var tableView: UITableView
var data: Array<String>
init(table: UITableView, data: Array<String>) {
self.data = data
self.tableView = table
super.init()
self.tableView.dataSource = self
self.tableView.register(MyTableViewCell.self, forCellReuseIdentifier: "myCell")
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.data.count
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! MyTableViewCell
cell.textLabel!.text = self.data[indexPath.row]
return cell
}
}
class MyTableViewCell : UITableViewCell {
//something here
}
Когда представление было загружено, таблица имеет 3 строки: a,b,c. Когда я нажимаю кнопку, ничего не меняется (ожидается: d, e, f)
Пожалуйста помогите!





Массивы Swift копируются по значению, поэтому строка self.data = data примет копию вашего массива. Последующее изменение содержимого массива источника не отразится на копии в вашем MyTableView.
Вам нужно будет снова передать массив и сделать вторую копию для обновления таблицы, например. напишите метод в MyTableView, подобный следующему: -
func setNewValues(data: Array<String>)
{
self.data = data
self.tableView.reloadData()
}
и вызовите это из вашей функции buttonTapped, то есть:
@IBAction func buttonTapped(_ sender: UIButton) {
arrData = ["d","e","f"]
myTableView!.setNewValues(data: arrData)
}
Будьте осторожны с принудительно развернутым myTableView — я бы заменил это '!' с участием '?'.
Работай как шарм. Вы сэкономили мне кучу часов. Большое спасибо!