重新加载数据后,我的TableView保持不变

时间:2019-06-27 04:12:27

标签: swift tableview reload

我写了一个类,可以让我简单地创建多个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)

请帮助我!

1 个答案:

答案 0 :(得分:1)

快速数组按值复制,因此行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-我将替换为'!'与“?”。