#ios #swift #uicollectionview #reloaddata
#iOS #swift #uicollectionview #reloaddata
Вопрос:
Я уже некоторое время пытаюсь выяснить, как оперативно обновлять uicollectionview.
Я пытался использовать несколько различных методов, чтобы сделать это, используя reloadData, reloadItems и reloadSections. Используя как DispatchQueue.main.async, так и нет.
Я не могу понять, как довести это до такой степени, чтобы, когда пользователь выбирает одну из ячеек, обновлять содержимое этой ячейки в режиме реального времени перед пользователем. В частности, выделите текст метки жирным шрифтом, а не жирным шрифтом, в зависимости от щелчков по ячейке.
Вот метка, которую я настроил в swift:
let nameLabel: UILabel = {
let label = UILabel()
label.text = ""
return label
}()
Вот didselectitem для collectionview
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:
Я не думаю, что вам нужно вызывать collectionView.reloadItems(at: [indexPath])
после его выбора. Прямой доступ к метке ячейки должен вносить изменения без необходимости перезагрузки ячейки.
Я предполагаю, что у вас есть некоторый код удаления из очереди в cellForItemAt
, который устанавливает обычный шрифт, поэтому, когда вы нажимаете на ячейку, ее метка выделяется жирным шрифтом, но затем сразу же возвращается к нормальному значению при перезагрузке.
Комментарии:
1. Когда я удаляю reloadItems, при выборе ячейки она не выделяется жирным шрифтом, пока я не коснусь другого места на экране. Вот почему я подумал, что мне нужно как-то обновить, чтобы показать новые настройки. Это не будет выделено жирным шрифтом, я просто сижу после нажатия на ячейку. Это то, что у меня есть для cellForItemAt пусть list_item = ViewController.brands[indexPath.item] cell.list_item = list_item возвращает ячейку
2. @flaskpiao это странно. Поможет ли это, если вы поместите этот код внутрь
willSelectItemAt
илиshouldHighlightItemAtIndexPath
вместо этого?