UITableViewController не выбирает ячейку при инициализации

У меня есть следующий подкласс UITableViewController:

final public class ILoveAppleSelectorTableViewController: UITableViewController {
    public weak var delegate: ILoveAppleSelectorTableViewControllerDelegate?
    public var data = [ILoveAppleGroupModel]()

    convenience init() {
        self.init(style: .plain)
    }

    convenience init(data: [ILoveAppleGroupModel]) {
        self.init(style: .plain)
        self.data = data
    }

    override public func viewDidLoad() {
        super.viewDidLoad()
        title = "Select APple Product"
        tableView.registerCellClass(CheckmarkTableViewCell.self)
        tableView.allowsSelection = true
        tableView.allowsMultipleSelection = false
    }

    // MARK: - Selection

    public func selectItem(at indexPath: IndexPath) {
        tableView.selectRow(at: indexPath, animated: false, scrollPosition: .none)
    }

    // MARK: - Table view data source

    override public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return data.count
    }

    override public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell: CheckmarkTableViewCell = tableView.dequeueCell(for: indexPath)
        let item = data[indexPath.row]
        cell.textLabel?.text = item.material_group_name
        return cell
    }

    override public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let selectedappleProduct = data[indexPath.row]
        delegate?.ILoveAppleSelector(controller: self, didSelect: selectedappleProduct)
    }
}

Я создаю его экземпляр и вызываю метод selectItem:

let data = Array(appleProducts)
let selector = AppleProductSelector(data: data)
selector.selectItem(at: IndexPath(indexes: [0, 0]))
navigationController?.pushViewController(selector, animated: true)

Я проверяю в отладчике, что метод selectItem вызывается успешно, однако ничего не выбирается.

Если вместо этого я выберу элемент в viewWillAppear, все будет работать так, как ожидалось, и элемент будет отображаться как выбранный:

public override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    selectItem(at: selectedIndexPath)
}

Вы хотите показать галочку для выбранной строки при первом появлении табличного представления?

BhargavR 28.05.2019 14:31
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По умолчанию контроллер табличного представления очищает выбор при отображении табличного представления.

Вы создаете экземпляр своего класса, затем «выбираете» строку, а затем помещаете VC в стек. Когда он появляется, он очищает выбор.

В IB/Storyboard это контролируется флажком:

(снимите флажок, чтобы предотвратить очистку выбора)

В коде вы можете добавить это в свою функцию инициализации (или, возможно, в viewDidLoad()):

self.clearsSelectionOnViewWillAppear = false

Другие вопросы по теме