UITableView reloadData()Swift2没有重新加载数据

时间:2016-07-20 09:46:38

标签: ios uitableview swift2

我是Swift的新手并试图在UITableView中显示乘法表并根据滑块值更改数据。更改滑块位置时更新模型,但tableView未显示表的当前可见部分的更新。在滚动期间添加或删除新行时会发生更新。一些代码:

class ViewController: UIViewController, UITableViewDelegate {

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

let maxCount = 50
var multiplierArray: [String] = []

override func viewDidLoad() {
    super.viewDidLoad()
    let number: Int = Int(slider.value)
    populateData(number)
}

func populateData(number: Int) {
    var i = 0
    multiplierArray.removeAll()
    while i < maxCount {
        let table = i + 1
        let str = "\(number) x \(table) = \(table * number)"
        print(str)
        multiplierArray.append(str)
        i += 1
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
    let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")
    cell.textLabel?.text = multiplierArray[indexPath.row]
    print("cellForRowAtIndexPath called")
    return cell
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int{
    return 1
}

@IBAction func sliderValueChanged(sender: UISlider) {
    let number: Int = Int(slider.value)
    populateData(number)
    tableView.reloadData()
    print("slider value changed" + String(number))
}
}

我在这个问题上阅读了不少帖子,但无法弄清楚上述代码中的问题。我的理解是,当底层模型像android中的 notifyDataSetChanged()一样被更改时, tableView.reloadData()应该更新视图。我错过了tableView的一些功能吗?

1 个答案:

答案 0 :(得分:1)

您的ViewController课程需要实施UITableViewDataSource协议,无需在此处实施UITableViewDelegate。 您需要在viewDidLoad函数中分配它(例如):

override func viewDidLoad() {
    super.viewDidLoad()
    let number: Int = Int(slider.value)
    populateData(number)
    tableView.datasource = self;
}

快速注释: UITableViewDatasource是负责填充UITableView数据的人。 UITableViewDelegate关心细胞高度和选择状态。