Swift UICollectionView обновляет метку ячейки при клике, не обновляя в реальном времени - PullRequest
0 голосов
/ 21 марта 2019

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

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

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

Вот метка, которую я настроил в swift:

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

Вот дидселект для коллекции view

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])}

    }
}

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

Коллекция Просмотр примера выбора текста изменения ячейки

1 Ответ

0 голосов
/ 21 марта 2019

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

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

...