0

У меня есть коллекцияView, и каждая ячейка коллекции имеет несколько кнопок. Я хочу изменить фоновое изображение кнопки, которую я нажимаю в определенной ячейке, точно так же, как это работает для кнопки в приложении facebook.Изменение фонового изображения кнопки при нажатии UICollectionViewCell

enter image description here

Я создал пользовательский класс корма и связал его с методом cellForitemAt:

let cell: FeedCell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! FeedCell 

return cell 

поток 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") 
} 
} 

Не могли бы вы мне помочь в достижении того же ,

Thanks

+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: FeedCellDelegate? ниже перечисления, которое я объявил, вы положили его в свой код? –

+0

Я забыл это. заявление печати в одном из случаев коммутатора, но я не получаю никакого вывода для него. – Vyshakh

Смежные вопросы