tableView.reloadData() Table not updating

2019-07-14 03:14发布

The table does not display the updated array to return to the cell. When I launch the app I get blank cells. All permissions have been given in the storyboard. I tried the tableView.reloadData() everywhere but can't seem to make it work either. If anyone can explain where Im going wrong that would really help me get better.

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var slider: UISlider!

@IBAction func sliderSelector(_ sender: Any) {
    tableGenerate()
}

var arrayTable = [Int]()

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return arrayTable.count
}

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = UITableViewCell(style:UITableViewCellStyle.default, reuseIdentifier: "Cell")
    cell.textLabel?.text = String(arrayTable[indexPath.row])
    tableView.reloadData()
    return cell
}

func tableGenerate () {
    var tableMultiplier = 1
    while tableMultiplier <= 50 {
        arrayTable.append(tableMultiplier * Int(slider.value))
        tableMultiplier += 1
        print(arrayTable)
    }
}

标签: ios swift swift3
3条回答
Lonely孤独者°
2楼-- · 2019-07-14 03:18

By calling tableView.reloadData() inside cellForRowAt, you create an infinite loop, since reloadData() automatically calls cellForRowAt. You need to move reloadData() inside tableGenerate(), since it should only be called when your data source is changed.

You also need to create an IBOutlet for your tableView in Storyboard. Since you are not using a UITableViewController, you need to do this manually.

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var slider: UISlider!

    @IBAction func sliderSelector(_ sender: Any) {
        tableGenerate()
    }

    var arrayTable = [Int]()

    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arrayTable.count
    }

    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style:UITableViewCellStyle.default, reuseIdentifier: "Cell")
        cell.textLabel?.text = String(arrayTable[indexPath.row])
        return cell
    }

    func tableGenerate () {
        var tableMultiplier = 1
        while tableMultiplier <= 50 {
            arrayTable.append(tableMultiplier * Int(slider.value))
            tableMultiplier += 1
            print(arrayTable)
        }
        tableView.reloadData()
    }
}
查看更多
叛逆
3楼-- · 2019-07-14 03:23

forgot to create the table outlet ! I also forgot to reset the array with the array slider with arrayTable = [] now it works fine

查看更多
太酷不给撩
4楼-- · 2019-07-14 03:40

Add outlet of tableview like this and connect with table in storyboard-

@IBOutlet weak var tableView1: UITableView!

Change code to this -

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var slider: UISlider!
@IBOutlet weak var tableView1: UITableView!

@IBAction func sliderSelector(_ sender: Any) {
    tableGenerate()
}

var arrayTable = [Int]()

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return arrayTable.count
}

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = UITableViewCell(style:UITableViewCellStyle.default, reuseIdentifier: "Cell")
    cell.textLabel?.text = String(arrayTable[indexPath.row])
    return cell
}

func tableGenerate () {
    var tableMultiplier = 1
    while tableMultiplier <= 50 {
        arrayTable.append(tableMultiplier * Int(slider.value))
        tableMultiplier += 1
    }
        print(arrayTable)
    tableView1.reloadData()

}
查看更多
登录 后发表回答