集合视图(UPCarouselFlowLayout)中的按钮未收到onclick事件

时间:2019-05-22 08:04:40

标签: ios swift xcode carousel

我已经使用UPCarouselFlowLayout创建了一个轮播视图,并且效果很好。但是,单击视图中的UIButton时,不会发生任何操作。如何做到这一点,以便在单击UIButton时调用特定的动作?

CollectionViewCell

class MagicCollectionViewCell: UICollectionViewCell {

    @IBOutlet weak var magicview: UIView!
    @IBOutlet weak var magicimage: UIImageView!
    @IBOutlet weak var magiclabel: UILabel!
    @IBOutlet weak var magicbutton: UIButton!

    override func awakeFromNib() {
        super.awakeFromNib()

        self.magicview.isUserInteractionEnabled = true
        // Initialization code

        DispatchQueue.main.async {
            self.magicview.layer.shadowColor = UIColor.gray.cgColor
            self.magicview.layer.shadowOpacity = 0.5
            self.magicview.layer.shadowOpacity = 10.0
            self.magicview.layer.shadowOffset = .zero
            self.magicview.layer.shadowPath = UIBezierPath(rect: self.magicview.bounds).cgPath
            self.magicview.layer.shouldRasterize = false


        }
    }    
}

Magic1.swift

import UPCarouselFlowLayout

class Magic1: UIViewController,UICollectionViewDataSource,UICollectionViewDelegate {

    @IBOutlet weak var magiccollection: UICollectionView!


    override func viewDidLoad() {
        super.viewDidLoad()

        magiccollection.register(UINib.init(nibName: "MagicCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "magiccidentifier")

        let floawLayout = UPCarouselFlowLayout()
        floawLayout.itemSize = CGSize(width: UIScreen.main.bounds.width - 60.0, height: magiccollection.frame.size.height)
        floawLayout.scrollDirection = .horizontal
        floawLayout.sideItemScale = 0.8
        floawLayout.sideItemAlpha = 1.0
        floawLayout.spacingMode = .fixed(spacing: 5.0)
        magiccollection.collectionViewLayout = floawLayout

        magiccollection.delegate = self
        magiccollection.dataSource = self
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 2
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell = sexeducollec.dequeueReusableCell(withReuseIdentifier: "magiccidentifier", for: indexPath) as!MagicCollectionViewCell

        if indexPath.row == 0{
            cell.magiclabel.text = "Tester title"
            cell.sexedimage.image = #imageLiteral(resourceName: "merlin")

        }else if indexPath.row == 1{
            cell.magiclabel.text = "love is in the air"

        }else{
            cell.magiclabel.text = "Title - \(indexPath.row + 1)"

        }

        return cell
    }


    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

        if indexPath.row == 0{
        print("Accio")

        }else if indexPath.row == 1{
            print("alohamora")

        }
    }

}

我想做的是在magicbutton上单击indexPath.row == 0时调用特定的动作,而在indexPath.row == 1上单击时单击它调用特定的功能。

2 个答案:

答案 0 :(得分:1)

尝试这种方法!另外,您可以在IBAction上调用闭包

class ViewController: UICollectionViewController {

      override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
         return 2
      }

       override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
         if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "magiccidentifier", for: indexPath) as? MagicCollectionViewCell {
             switch indexPath.row {
             case 0:
                 cell.onCellTouched = { print("Hi")}
             default:
                 cell.onCellTouched = { print("By") }
             }
             return cell
         }

         return UICollectionViewCell()
     }

     override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
         let item = collectionView.cellForItem(at: indexPath) as? MagicCollectionViewCell
         item?.onCellTouched()
     }
 }

class MagicCollectionViewCell: UICollectionViewCell {

     var onCellTouched: () -> Void = { assertionFailure("Cell action didn't set up") }

     override func awakeFromNib() {
         super.awakeFromNib()

         self.backgroundColor = .black
     }
 }

答案 1 :(得分:0)

您缺少IBAction中的按钮MagicCollectionViewCell。因此,为按钮添加一个操作:

    @IBAction func buttonAction(_ sender: UIButton) {

}