0

私はcollectionViewを持っています。コレクションビューの各セルには複数のボタンがあります。私は、特定のセルでクリックしたボタンの背景イメージを、facebookアプリケーションのボタンのように機能するように変更したいと考えています。クリックしたときのボタンの背景画像の変更UICollectionViewCell

enter image description here

私は、カスタムのフィードクラスを作成し、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") 
} 
} 

あなたが同じことを達成するために私を助けてもらえ。

ありがとうございました

+0

ボタンを押したときにボタンの色を変更するには、セルクラスで__ @ IBAction__を作成します。また、__prepareForReuse__メソッドをオーバーライドし、別の__indexPath__で再利用するときにボタンの背景色をリセットします。 – Adeel

+0

http://stackoverflow.com/a/40154725/6656894この回答を参照 –

+0

https://www.dropbox.com/s/ub7wln5y6hdw0sz/like%20button.mov?dl=0 –

答えて

0

次のコードを参照してください。

あなた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 
    } 
} 
} 

希望します。

+0

ラインセルでエラーが発生します.delegate = self "型の値 'FeedCell'にメンバー '代理人'がありません。 – Vyshakh

+0

var delegate:FeedCellDelegateを宣言した列挙体の下にコードを入れましたか? –

+0

私はそれを忘れてしまいました。スイッチのケースの1つにprintステートメントがありますが、同じものが出力されていません。 – Vyshakh

関連する問題