我是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的一些功能吗?
答案 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
关心细胞高度和选择状态。