Когда я вызываю reload tableView.reloadData (), пользовательское свойство ячейки не изменится - PullRequest
0 голосов
/ 09 июня 2018

У меня есть табличное представление с пользовательской ячейкой, данные которой поступают из области:

var Materials: Results<RealmMaterial>!

override func viewDidLoad() {
    let realm = RealmService.shared.realm
    Materials = realm.objects(RealmMaterial.self).filter("InspectResult == 0")
}

В каждой ячейке у меня есть несколько кнопок, свойства которых меняются в зависимости от информации о ячейке.Я справляюсь с этим так:

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
    let cell = tableView.dequeueReusableCell(withIdentifier: "MaterialCell") as! MaterialsTableViewCell
    let myMaterial = Materials[indexPath.row]
    cell.materialCodeLbl.text = myMaterial.Number
    cell.materialDescLbl.text = myMaterial.Desc
    cell.redBtnOutlet.tag = myMaterial.Id
    cell.greenBtnOutlet.tag = myMaterial.Id
    cell.yellowBtnOutlet.tag = myMaterial.Id
    cell.cellView.layer.shadowColor = UIColor.black.cgColor
    cell.cellView.layer.shadowOpacity = 0.1
    cell.cellView.layer.shadowOffset = CGSize.zero
    cell.cellView.layer.shadowRadius = 10
    cell.cellView.layer.cornerRadius = 10
    cell.redBtnOutlet.layer.cornerRadius = 5
    cell.greenBtnOutlet.layer.cornerRadius = 5
    cell.yellowBtnOutlet.layer.cornerRadius = 5
    if myMaterial.InspectResult == 1 {
        cell.greenBtnOutlet.backgroundColor = UIColor(red: 137/255, green: 206/255, blue: 75/255, alpha: 1)
        cell.yellowBtnOutlet.backgroundColor = UIColor(red: 192/255, green: 192/255, blue: 192/255, alpha: 1)
        cell.redBtnOutlet.backgroundColor = UIColor(red: 192/255, green: 192/255, blue: 192/255, alpha: 1)
    }
    else if myMaterial.InspectResult == 2 {
        cell.redBtnOutlet.backgroundColor = UIColor(red: 253/255, green: 77/255, blue: 67/255, alpha: 1)
        cell.greenBtnOutlet.backgroundColor = UIColor(red: 192/255, green: 192/255, blue: 192/255, alpha: 1)
        cell.yellowBtnOutlet.backgroundColor = UIColor(red: 192/255, green: 192/255, blue: 192/255, alpha: 1)
    }
    else if myMaterial.InspectResult == 3 {
        cell.yellowBtnOutlet.backgroundColor = UIColor(red: 240/255, green: 192/255, blue: 16/255, alpha: 1)
        cell.greenBtnOutlet.backgroundColor = UIColor(red: 192/255, green: 192/255, blue: 192/255, alpha: 1)
        cell.redBtnOutlet.backgroundColor = UIColor(red: 192/255, green: 192/255, blue: 192/255, alpha: 1)
    }
    return cell

}

Но когда я перезагружаю данные, свойства объекта ячейки не изменятся.Это говорит о том, что cellForRowAt доза не выполняется снова и свойства зависят от индекса клетки.в первый раз, когда данные загружаются, он работает нормально.но когда я перезагружаю данные, они не изменяются снова с новыми данными

1 Ответ

0 голосов
/ 09 июня 2018

Мне кажется, что вы перезагружаете представление таблицы, но фактически не обновляете данные.

Из вашего заявления

Похоже, что доза cellForRowAt не выполняется снова

Я полагаю, что вы на самом деле не подтвердили, что cellForRowAt не выполняется, и я предполагаю, что он выполняется, но массив Materials не был обновлен с вашими новыми данными.

Убедитесь, что Materials имеет новые данные, прежде чем вызывать tableView.reloadData().

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