Swift UICollectionView обновляет метку ячейки при нажатии не обновляется в реальном времени

Я уже некоторое время пытаюсь понять, как обновить uicollectionview в реальном времени.

Я попытался использовать несколько различных методов, чтобы сделать это, используя reloadData, reloadItems и reloadSections. Использование как DispatchQueue.main.async, так и нет.

Я не могу понять, как довести его до такой степени, что когда пользователь выбирает одну из ячеек, обновлять содержимое этой ячейки можно прямо перед пользователем. В частности, сделайте текст метки полужирным, а не полужирным в зависимости от количества щелчков по ячейке.

Вот ярлык, который я быстро установил:

let nameLabel: UILabel = {
    let label = UILabel()
    label.text = ""
    return label
}()

Вот элемент didselect для просмотра коллекции

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = collectionView.cellForItem(at: indexPath) as! FilterCollectionViewCell
    let selected = ViewController.brands[indexPath.item]
    if FilterLauncher.selectedOptions.contains(selected){
        let loc = FilterLauncher.selectedOptions.firstIndex(of: selected)
        FilterLauncher.selectedOptions.remove(at: loc!)
        cell.nameLabel.font = UIFont.boldSystemFont(ofSize: 2.0)
        DispatchQueue.main.async {
            collectionView.reloadItems(at: [indexPath])
        }
    }
    else{
        FilterLauncher.selectedOptions.append(selected)
        cell.nameLabel.font = UIFont.boldSystemFont(ofSize: 15.0)
        DispatchQueue.main.async{
             self.collectionView.reloadItems(at: [indexPath])}

    }
}

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

Просмотр коллекции, пример текста изменения ячейки


person jkatt    schedule 20.03.2019    source источник


Ответы (1)


Я не думаю, что вам нужно звонить collectionView.reloadItems(at: [indexPath]) после его выбора. Доступ к метке ячейки напрямую должен внести изменения без необходимости перезагружать ячейку.

Я предполагаю, что у вас есть код удаления из очереди в cellForItemAt, который устанавливает нормальный шрифт, поэтому, когда вы нажимаете на ячейку, ее метка становится полужирной, но затем сразу же возвращается в нормальное состояние при перезагрузке.

person Tom Pearson    schedule 20.03.2019
comment
Когда я удаляю reloadItems, когда я выбираю ячейку, она не выделяется жирным шрифтом, пока я не коснусь где-нибудь еще на экране. Вот почему я подумал, что мне нужно как-то обновить, чтобы показать новые настройки. Не будет жирным, я просто сижу после того, как постучал по сотовому. Это то, что у меня есть для cellforItemat let list_item = ViewController.brands [indexPath.item] cell.list_item = list_item return cell - person jkatt; 21.03.2019
comment
@flaskpiao, это странно. Поможет ли вместо этого поместить этот код внутрь willSelectItemAt или shouldHighlightItemAtIndexPath? - person Tom Pearson; 21.03.2019