У меня есть список аватаров пользователей внутри UICollectionViewCell.Когда пользователь нажимает на него, я хотел бы добавить выбранный элемент в коллекцию, а также выделить его, чтобы указать, что он был нажат.
К сожалению, пользовательский интерфейс не обновляется.Есть идеи?
Изначально я загружаю изображения и устанавливаю их округленными.Я могу даже установить цвет границы, если я хочу, но сейчас я установил его, чтобы очистить.Это все работает при загрузке ячеек:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath as IndexPath) as! UICollectionViewCell
// Configure the cell
let member: UserProfile = groupMembers[indexPath.item]
let imgAvatar = cell.viewWithTag(2) as! UIImageView
imgAvatar.layer.cornerRadius = contactAvatar.frame.size.width / 2
imgAvatar.clipsToBounds = true
imgAvatar.contentMode = UIViewContentMode.scaleAspectFill
imgAvatar.layer.borderWidth = 2.0
imgAvatar.layer.borderColor = UIColor.clear.cgColor
imgAvatar.layer.cornerRadius = 30.0
let downloadURL = NSURL(string: member.avatarUrl)!
imgAvatar.af_setImage(withURL: downloadURL as URL)
return cell
}
А теперь вот код, который выполняется при нажатии на любой данный UIImageView в коллекции, но, похоже, он не обновляет изображение:
///Fired when tapped on an image of a person
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath as IndexPath) as! UICollectionViewCell
let tappedUser: UserProfile = groupMembers[indexPath.item]
let imgAvatar = cell.viewWithTag(2) as! UIImageView
..add item to collection, etc..
//Update imageview to indicate it's been tapped.
DispatchQueue.main.async {
contactAvatar.layer.cornerRadius = contactAvatar.frame.size.width / 2
imgAvatar.clipsToBounds = true
imgAvatar.contentMode = UIViewContentMode.scaleAspectFill
imgAvatar.layer.borderWidth = 2.0
imgAvatar.layer.cornerRadius = 30.0
imgAvatar.layer.borderColor = UIcolor.blue.cgColor
}
}
}
Запустив этот код, он достигает точки останова, чтобы указать, что я нажал на элемент, но он не обновляет интерфейс.Я убежден, что существует проблема с потоком / пользовательским интерфейсом, когда представление коллекции не «перерисовывает» изменения, внесенные в изображение.Может быть, я не могу изменить внешний вид представления внутри коллекции?
Заранее спасибо за понимание.