Swift 4 Table View Получение неправильной ячейки - PullRequest
0 голосов
/ 14 мая 2018

У меня проблемы с выбором правильных ячеек в моем табличном представлении.Мой код:

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
}

Это приложение, когда оно работает

Проблема в том, что когда я нажимаю кнопку без прокрутки таблицы, ничего не происходит, но если япрокрутите вниз, чтобы текущий вид включал ячейки, помеченные 4/5/6, и нажмите кнопку, для обеих ячеек, помеченных как «4» и «0», заданы желтые цвета фона.

В конечном итоге я хотел бы знать, почему этоДело в том, что это влияет не только на фон, например, при выполнении цикла for для суммирования высоты ячеек для автоматического изменения высоты просмотра таблицы, невидимые ячейки вызывают сбой программы, так как она возвращает ноль.

Любая помощь будет принята с благодарностью, почему это так!

После нажатия кнопки, когда отображается 4

1 Ответ

0 голосов
/ 14 мая 2018

Ячейки используются повторно - вы можете получить ссылку только на видимые ячейки.

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

cell в вашем случае - ноль, когда строка № 4 не видна.Если вы хотите изменить поведение в ячейках, вам следует изменить модель и вызвать, например, reloadData в вашем UITableView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...