重新加载数据后我的 TableView 没有改变
My TableView's not changed after reload data
我写了一个 class 让我可以简单地创建多个 tableView。当我第一次调用此 class 时,一切正常。但是当我更改一些数据并重新加载 table 时,没有任何改变。
示例代码:
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
}
加载视图时,table 有 3 行:a、b、c。当我点击按钮时,没有任何变化(预期:d、e、f)
请帮帮我!
Swift 数组是按值复制的,因此行 self.data = data
将获取数组的副本。稍后更改源的数组内容将不会反映在您 MyTableView
中的副本中。
您需要再次传递数组并获取第二个副本来更新 table,例如在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)
}
不过要小心 force-unwrapped myTableView
- 我会替换那个 '!'用'?'。
我写了一个 class 让我可以简单地创建多个 tableView。当我第一次调用此 class 时,一切正常。但是当我更改一些数据并重新加载 table 时,没有任何改变。
示例代码:
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
}
加载视图时,table 有 3 行:a、b、c。当我点击按钮时,没有任何变化(预期:d、e、f)
请帮帮我!
Swift 数组是按值复制的,因此行 self.data = data
将获取数组的副本。稍后更改源的数组内容将不会反映在您 MyTableView
中的副本中。
您需要再次传递数组并获取第二个副本来更新 table,例如在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)
}
不过要小心 force-unwrapped myTableView
- 我会替换那个 '!'用'?'。