Как обновить UILabel в статическом UITableView при нажатии? - PullRequest
0 голосов
/ 07 июня 2019

Я создал приложение для iOS (XCode 9, Swift 4), единственным видом которого является табличное представление, установленное на «Статические ячейки».Контроллер представления этой таблицы связан с пользовательским подклассом UITableViewController, код которого я включаю ниже.Таблица имеет один раздел, и этот раздел имеет одну строку.Внутри этой строки находится метка, текст которой первоначально был «Метка», а метка подключена к IBOutlet в моем контроллере пользовательского представления. Вот как выглядит раскадровка для более визуально настроенных.

Мой пользовательский контроллер табличного представления:

import UIKit

class MyTableViewController: UITableViewController {
    @IBOutlet weak var label: UILabel!

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        self.label.text = "changed"
        print("cell clicked")
    }
}

Прямо сейчас, когда ячейка с меткойпри нажатии на нее печатается «ячейка нажата», но текст не изменяется.При повторном нажатии на ячейку снова печатается «ячейка нажата», ячейка становится выделенной, и текст метки становится «измененным».

В идеале, метка изменит свой текст на «измененный» сразу же, когдакамера, в которой он находится, прослушивается, но это не так, и я не могу понять, почему.Я подумал, что это может быть связано с тем, что ярлык не обновляется / перерисовывается, даже если его текст меняется, потому что, когда я щелкаю ярлык и затем прокручиваю представление, текст ярлыка становится «измененным» сразу после начала прокрутки.Я попытался обернуть self.label.text = changed с DispatchQueue.main.async {}, чтобы посмотреть, изменится ли что-нибудь, но это не так.

Для контекста это упрощенный случай вопроса, который я задал здесь , и я свел вопрос (насколько я могу судить) к этому простому случаю.У кого-нибудь есть идеи, что я могу сделать?Большое вам спасибо !!!

1 Ответ

0 голосов
/ 07 июня 2019

Если вы хотите обновить какое-либо свойство ячейки в didSelect, вам сначала нужно получить ссылку на эту ячейку, а затем обновить ее свойства:

let cell = tableView.cellForRow(at: indexPath)
cell?.textLabel?.text = "New value"
cell?.detailTextLabel?.text = "Some other value"

Здесь вам не нужен IBOutlet.Если вы используете пользовательскую ячейку, то вы можете иметь IBOutlet в своем подклассе UITableViewCell, а затем вы можете получить ссылку на ячейку (как указано выше) и можете изменять любые пользовательские свойства ячейки.

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