UITableViewController не выбирает ячейку при инициализации - PullRequest
0 голосов
/ 28 мая 2019

У меня есть следующий подкласс 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)
}

1 Ответ

2 голосов
/ 28 мая 2019

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

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

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

enter image description here

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

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

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