[英]Changing button background image when clicked UICollectionViewCell
我有一个collectionView,集合视图的每个单元格都有多个按钮。 我想更改在特定单元格中单击的按钮的背景图像,就像它在facebook应用中的按钮一样工作。
我创建了一个自定义提要类并将其链接到cellForitemAt方法:
let cell: FeedCell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! FeedCell
return cell
进料单元:
import Foundation
import UIKit
class FeedCell: UICollectionViewCell
{
@IBOutlet weak var userNameText: UILabel!
@IBOutlet weak var userProfilePic: UIImageView!
@IBOutlet weak var foodPic: UIImageView!
@IBOutlet weak var likePic: UIImageView!
@IBOutlet weak var likeText: UILabel!
@IBOutlet weak var dislikePic: UIImageView!
@IBOutlet weak var dislikeText: UILabel!
@IBOutlet weak var favPic: UIImageView!
@IBOutlet weak var favText: UILabel!
@IBOutlet weak var commentPic: UIImageView!
@IBOutlet weak var commentText: UILabel!
@IBOutlet weak var sharePic: UIImageView!
@IBOutlet weak var shareCount: UILabel!
@IBAction func TempTest(_ sender: UIButton) {
print("Pressed")
}
}
您能否帮助我实现同样的目标。
谢谢
请参考以下代码。
您的UICollectionViewCell类
protocol FeedCellDelegate{
func didPress(with type:FeedCell.ClickedButtonType, senderImageView imageView:UIImageView, withcell cell:FeedCell)
}
class FeedCell: UICollectionViewCell
{
enum ClickedButtonType {
case userProfilePic,foodPic,likePic,likeText,dislikePic,favPic,commentPic,sharePic
}
var delegate : FeedCellDelegate?
@IBOutlet weak var userNameText: UILabel!
@IBOutlet weak var userProfilePic: UIImageView!
@IBOutlet weak var foodPic: UIImageView!
@IBOutlet weak var likePic: UIImageView!
@IBOutlet weak var likeText: UILabel!
@IBOutlet weak var dislikePic: UIImageView!
@IBOutlet weak var dislikeText: UILabel!
@IBOutlet weak var favPic: UIImageView!
@IBOutlet weak var favText: UILabel!
@IBOutlet weak var commentPic: UIImageView!
@IBOutlet weak var commentText: UILabel!
@IBOutlet weak var sharePic: UIImageView!
@IBOutlet weak var shareCount: UILabel!
@IBAction func TempTest(_ sender: UIButton) {
//Call the delegate method and pass the values according to your action just for example i have used commentPic state you can put a switch case or if-else
delegate?.didPress(with: .commentPic, senderImageView: commentPic, withcell: self)
}
}
和您的视图控制器。
//Your controller implements FeedCellDelegate
class YourViewController : UIViewController,FeedCellDelegate,UICollectionViewDataSource{
@IBOutlet var collectionView : UICollectionView!
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 1//Use your array to return the count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell: FeedCell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! FeedCell
cell.delegate = self
return cell
}
func didPress(with type:FeedCell.ClickedButtonType, senderImageView imageView:UIImageView, withcell cell:FeedCell){
//Get the indexPath
let indexPath = collectionView.indexPath(for: cell)
//remove the break and put all other enum cases and you can handle the cases and change the image according to your logic
switch type {
case .userProfilePic: break
default: break
}
}
}
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.