Post

Replies

Boosts

Views

Created

UICollectionView - Changing UI of one specific cell causes changes for every fifth cell
Hey guys. I am having an issue with one of my projects. UICollectionViewCell in my UICollectionView has a plus button with the systemImage "plus". When clicked, its changing to systemImage "checkmark". The issue is, clicking one button, changes UI for every fifth cell. On top of that, animation does not finish. Alpha goes to 0, and then the image is being changed, alpha should go to 1 but never gets there. It stops somewhere between 0.7-0.8. Here is my animation block: private func animateButtonView(_ viewToAnimate: UIView) {         UIView.animate(withDuration: 0.2, animations: {viewToAnimate.alpha = 0}) { [weak self] (true) in             guard let self = self else { return }             switch true {             case true:                 DispatchQueue.main.async { self.addToFavoritesButton.setImage(SFSymbolsAsImg.checkmark, for: .normal) }                 UIView.animate(withDuration: 0.2, animations: {viewToAnimate.alpha = 1} )             case false:                 return             }         }     } Animation block is executed in my objective function that is called in addTarget for a button. I've asked that question on many forums and got not much. I'll appreciate any help. Many thanks!
11
0
2.1k
Mar ’21
UICollectionViewCell UI bugs
Hey guys. Cut to the chase. Trynna create some cells in my CollectionView. Cells will populate with the object of type Tweet. Some Tweet(s) has urlToExpand, some has value nil. Based on that, button "See more" will be visible or nah. I am certain that the data is passed correctly into Cell as I have checked it with the print. However button works randomly. Sometimes it does display, sometimes it doesn't. I have no idea why. Here is my dataSource update in VC private func configureDataSource() { &#9;&#9;&#9;&#9;dataSource = UICollectionViewDiffableDataSource<Section, Tweet>(collectionView: collectionView, cellProvider: { (collectionView, indexPath, tweet) -> UICollectionViewCell? in &#9;&#9;&#9;&#9;&#9;&#9;let cell = collectionView.dequeueReusableCell(withReuseIdentifier: SearchTweetsCell.reuseId, for: indexPath) as! SearchTweetsCell &#9;&#9;&#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;&#9;&#9;cell.set(with: tweet, user: self.user) &#9;&#9;&#9;&#9;&#9;&#9;cell.delegateSafari = self &#9;&#9;&#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;&#9;&#9;return cell &#9;&#9;&#9;&#9;}) &#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;dataSource.supplementaryViewProvider = { (collectionView, kind, indexPath) in &#9;&#9;&#9;&#9;&#9;&#9;let header = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: SearchTweetsVCCollectionHeader.reuseId, for: indexPath) as! SearchTweetsVCCollectionHeader &#9;&#9;&#9;&#9;&#9;&#9;header.set(with: self.user) &#9;&#9;&#9;&#9;&#9;&#9;return header &#9;&#9;&#9;&#9;} &#9;&#9;} Here is the function from collectionViewCell that I am calling in my cv while populating cells. func set(with usersTweet: Tweet, user: User) { &#9;&#9;&#9;&#9;self.user&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; = user &#9;&#9;&#9;&#9;tweet&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; = usersTweet &#9;&#9;&#9;&#9;urlString&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; = usersTweet.urlToExpandWithSafari &#9;&#9;&#9;&#9;tweetBodyLabel.text&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; = usersTweet.tweetText &#9;&#9;&#9;&#9;timeDateLabel.text&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;= usersTweet.createdAt.formatToTwitterPostDate() &#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;sharesView.set(itemInfoType: .shares,&#9; with: usersTweet.retweetCounter.convertToKMFormatStr()) &#9;&#9;&#9;&#9;likesView.set(itemInfoType: .likes,&#9;&#9; with: usersTweet.likesCounter.convertToKMFormatStr()) &#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;guard tweet.urlToExpandWithSafari != nil else { &#9;&#9;&#9;&#9;&#9;&#9;DispatchQueue.main.async { self.goSafariButton.removeFromSuperview() } &#9;&#9;&#9;&#9;&#9;&#9;goSafariButton.isEnabled = false &#9;&#9;&#9;&#9;&#9;&#9;return &#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;DispatchQueue.main.async { self.goSafariButton.setTitle(TweetStrings.seeFull, for: .normal) } &#9;&#9;} Many thanks for any help.
Topic: UI Frameworks SubTopic: UIKit Tags:
0
0
1.5k
Jan ’21