我在选择表格视图中的正确单元格时遇到问题。我的代码是:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var MyTableView: UITableView
var cellsArray = [ "0" , "1" , "2" , "3" , "4" , "5" , "6" , "7"]

override func viewDidLoad() {
    super.viewDidLoad()
    MyTableView.layer.borderWidth = 1

}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 8
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = MyTableView.dequeueReusableCell(withIdentifier: "cells", for: indexPath)
    cell.textLabel?.text = cellsArray[indexPath.row]
    return cell
}

@IBAction func MyButtonClick(_ sender: Any) {
    let myIndexPath = IndexPath(row: 4 ,section: 0)
    let cell = MyTableView.cellForRow(at: myIndexPath)
    cell?.backgroundColor = UIColor.yellow
}


This is the application when it's running

问题是,当我按下按钮而不滚动表格视图时,什么也没发生,但是如果我向下滚动,则当前视图包括标记为4/5/6的单元格,然后按下按钮,标记为“ 4”和“ 0”的两个单元格都有其背景色设置为黄色。

我最终想知道为什么会这样,因为它不仅影响背景,例如在执行for循环以求单元格高度求和以自动更改表格视图的高度时,不在视图中的单元格会使程序崩溃返回null。

任何帮助将不胜感激,这是为什么!

在查看4时按下按钮后

最佳答案

单元正在重用-您只能引用可见的单元。

let myIndexPath = IndexPath(row: 4 ,section: 0)
let cell = MyTableView.cellForRow(at: myIndexPath)
cell?.backgroundColor = UIColor.yellow


当第4行不可见时,您的cell为nil。如果要更改单元格中的行为,则应修改模型并在UITableView上调用例如reloadData

关于ios - Swift 4表 View 获取错误的单元格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50334984/

10-16 04:50