Post

Replies

Boosts

Views

Activity

Comment on UICollectionViewCell improperly sizes itself after calling reloadData()
@Claude31, Sorry let me try that again I guess you can't do code blocks in comments... Here is my cellForItemAt func: `    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {         let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "post", for: indexPath) as! PostView         cell.setupView(post: posts[indexPath.row])         cell.vc = self         self.noPostsLabel.text = ""         return cell     }` Here is my cell.setupView func: `    public func setupView(post: Post) {         print("Override has been called.")         contentView.addSubview(commentsButton)         contentView.addSubview(kuduAppTeamDeleteButton)         contentView.addSubview(titleLabel)         contentView.addSubview(infoButton)         contentView.addSubview(imageViewButton)         contentView.addSubview(likeButton)         contentView.addSubview(followButton)         contentView.addSubview(profile)         contentView.addSubview(likeCount)         contentView.addSubview(date)         contentView.addSubview(line)         addConstraints()         guard let post = fb.posts.firstIndex(where: { p in p.id == post.id }) else { return }         self.post = post         guard let user = fb.users.firstIndex(where: { user in user.id == fb.posts[post].uid }) else { return }         self.user = user                  if fb.currentUser.likes.contains(fb.posts[post].id) {             self.likeButton.setImage(UIImage(systemName: "hand.thumbsup.fill"), for: .normal)             self.likeButton.tintColor = UIColor.theme.blueColor         } else {             self.likeButton.setImage(UIImage(systemName: "hand.thumbsup"), for: .normal)             self.likeButton.tintColor = .label         }         let result = String(format: "%ld %@", locale: Locale.current, fb.posts[post].likeCount, "")         likeCount.text = result                           //Button Actions         infoButton.addAction(infoButtonAction, for: .touchUpInside)         likeButton.addAction(likeButtonAction, for: .touchUpInside)         followButton.addAction(followButtonAction, for: .touchUpInside)         imageViewButton.addAction(imageViewButtonAction, for: .touchUpInside)         profile.addAction(profileAction, for: .touchUpInside)         commentsButton.addAction(commentsButtonAction, for: .touchUpInside)         kuduAppTeamDeleteButton.addAction(kuduAppTeamDeleteButtonAction, for: .touchUpInside)                  //Date         let dateFormatter = DateFormatter()         dateFormatter.timeStyle = .none         dateFormatter.dateStyle = .long         let dateString = dateFormatter.string(from: fb.posts[post].date)         date.text = dateString                  //Set follow button text         if self.fb.currentUser.following.contains(fb.users[user].id) {             self.followButton.label.text = "Unfollow"         } else {             self.followButton.label.text = "Follow"         }                  //Set imageview image         imageViewButton.setImage(fb.posts[post].image, for: .normal)                  imageViewButton.imageView!.contentMode = .scaleAspectFill                  //Set user image         profile.usernameLabel.text = fb.users[user].username         profile.profileImage.image = fb.users[user].profileImage         if profile.profileImage.image == UIImage(systemName: "person.circle.fill") {             profile.profileImage.tintColor = UIColor.theme.accentColor         }         //Set post title         titleLabel.text = fb.posts[post].title     }` Here is my prepareForReuse func: `    override func prepareForReuse() {         print("This is called.")         //Remove all actions         infoButton.removeAction(infoButtonAction, for: .touchUpInside)         likeButton.removeAction(likeButtonAction, for: .touchUpInside)         imageViewButton.removeAction(imageViewButtonAction, for: .touchUpInside)         profile.removeAction(profileAction, for: .touchUpInside)         commentsButton.removeAction(commentsButtonAction, for: .touchUpInside)         followButton.removeAction(followButtonAction, for: .touchUpInside)         kuduAppTeamDeleteButton.removeAction(kuduAppTeamDeleteButtonAction, for: .touchUpInside)                  //Remove any other text or images         for subview in imageViewButton.subviews {             if let subview = subview as? UIImageView, subview.image == UIImage(systemName: "play.circle.fill") {                 subview.removeFromSuperview()             }         }         imageViewButton.setImage(nil, for: .normal)         kuduAppTeamDeleteButton.color = nil         profile.profileImage.image = nil         titleLabel.text = nil         date.text = nil         self.followButton.label.text = nil                  commentsButton.removeFromSuperview()         kuduAppTeamDeleteButton.removeFromSuperview()         titleLabel.removeFromSuperview()         infoButton.removeFromSuperview()         imageViewButton.removeFromSuperview()         likeButton.removeFromSuperview()         followButton.removeFromSuperview()         profile.removeFromSuperview()         likeCount.removeFromSuperview()         date.removeFromSuperview()         line.removeFromSuperview()     }` Thank you!!!
Dec ’21
Comment on UICollectionViewCell improperly sizes itself after calling reloadData()
@Claude31, here is my code for cellForItemAt: `func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {         let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "post", for: indexPath) as! PostView         cell.setupView(post: posts[indexPath.row])         cell.vc = self         self.noPostsLabel.text = ""         return cell     } ` Here is what cell.setupView() does:' `     public func setupView(post: Post) {         print("Override has been called.")         contentView.addSubview(commentsButton)         contentView.addSubview(kuduAppTeamDeleteButton)         contentView.addSubview(titleLabel)         contentView.addSubview(infoButton)         contentView.addSubview(imageViewButton)         contentView.addSubview(likeButton)         contentView.addSubview(followButton)         contentView.addSubview(profile)         contentView.addSubview(likeCount)         contentView.addSubview(date)         contentView.addSubview(line)         addConstraints()         guard let post = fb.posts.firstIndex(where: { p in p.id == post.id }) else { return }         self.post = post         guard let user = fb.users.firstIndex(where: { user in user.id == fb.posts[post].uid }) else { return }         self.user = user                  if fb.currentUser.likes.contains(fb.posts[post].id) {             self.likeButton.setImage(UIImage(systemName: "hand.thumbsup.fill"), for: .normal)             self.likeButton.tintColor = UIColor.theme.blueColor         } else {             self.likeButton.setImage(UIImage(systemName: "hand.thumbsup"), for: .normal)             self.likeButton.tintColor = .label         }         let result = String(format: "%ld %@", locale: Locale.current, fb.posts[post].likeCount, "")         likeCount.text = result                           //Button Actions         infoButton.addAction(infoButtonAction, for: .touchUpInside)         likeButton.addAction(likeButtonAction, for: .touchUpInside)         followButton.addAction(followButtonAction, for: .touchUpInside)         imageViewButton.addAction(imageViewButtonAction, for: .touchUpInside)         profile.addAction(profileAction, for: .touchUpInside)         commentsButton.addAction(commentsButtonAction, for: .touchUpInside)         kuduAppTeamDeleteButton.addAction(kuduAppTeamDeleteButtonAction, for: .touchUpInside)                  //Date         let dateFormatter = DateFormatter()         dateFormatter.timeStyle = .none         dateFormatter.dateStyle = .long         let dateString = dateFormatter.string(from: fb.posts[post].date)         date.text = dateString                  //Set follow button text         if self.fb.currentUser.following.contains(fb.users[user].id) {             self.followButton.label.text = "Unfollow"         } else {             self.followButton.label.text = "Follow"         }                  //Set imageview image         imageViewButton.setImage(fb.posts[post].image, for: .normal)                  imageViewButton.imageView!.contentMode = .scaleAspectFill                  //Set user image         profile.usernameLabel.text = fb.users[user].username         profile.profileImage.image = fb.users[user].profileImage         if profile.profileImage.image == UIImage(systemName: "person.circle.fill") {             profile.profileImage.tintColor = UIColor.theme.accentColor         }         //Set post title         titleLabel.text = fb.posts[post].title     } ` Here is my prepareForReuse() func: `     override func prepareForReuse() {         print("This is called.")         //Remove all actions         infoButton.removeAction(infoButtonAction, for: .touchUpInside)         likeButton.removeAction(likeButtonAction, for: .touchUpInside)         imageViewButton.removeAction(imageViewButtonAction, for: .touchUpInside)         profile.removeAction(profileAction, for: .touchUpInside)         commentsButton.removeAction(commentsButtonAction, for: .touchUpInside)         followButton.removeAction(followButtonAction, for: .touchUpInside)         kuduAppTeamDeleteButton.removeAction(kuduAppTeamDeleteButtonAction, for: .touchUpInside)                  //Remove any other text or images         for subview in imageViewButton.subviews {             if let subview = subview as? UIImageView, subview.image == UIImage(systemName: "play.circle.fill") {                 subview.removeFromSuperview()             }         }         imageViewButton.setImage(nil, for: .normal)         kuduAppTeamDeleteButton.color = nil         profile.profileImage.image = nil         titleLabel.text = nil         date.text = nil         self.followButton.label.text = nil                  commentsButton.removeFromSuperview()         kuduAppTeamDeleteButton.removeFromSuperview()         titleLabel.removeFromSuperview()         infoButton.removeFromSuperview()         imageViewButton.removeFromSuperview()         likeButton.removeFromSuperview()         followButton.removeFromSuperview()         profile.removeFromSuperview()         likeCount.removeFromSuperview()         date.removeFromSuperview()         line.removeFromSuperview()     } ` Hope that helps clarify things. Let me know if you need anything else. And thanks so much your last answer was super helpful!
Dec ’21
Comment on How do you allow tasks that take longer than the 30 seconds allowed in the background thread to continue performing until done?
Thanks for the response this is super helpful! So I get what you are saying and I now understand that I will need to use URLSession so it can complete the task even if they close out of the app, but how exactly do you use URLSession to upload data? I am seeing a lot of resources that show you how to download the data using URLSession, but not many show you how to upload data using the URLSession. Could you give me an example?
Dec ’21