Swift 3中的UICollectionView自定义按钮操作

时间:2017-04-01 13:58:43

标签: ios swift3 uicollectionview uicollectionviewcell

我使用过UICollectionView,并使用API​​的结果填充它。 API中包含ID,图像,名称,描述和真假。 我已经实现了所有这些功能,现在所有结果都加载到此集合视图中。

    extension VCResCourses : UICollectionViewDelegate {

}

extension VCResCourses: UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
    {
        let length = (UIScreen.main.bounds.width - 16)
        return CGSize(width: length, height: 135);
    }
}

extension VCResCourses : UICollectionViewDataSource {
    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }

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

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let currentCell = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier,for:indexPath) as! CVCResCourse

    let doCourses: [DOCourses] = dataSources.total()
    let doCourse = doCourses[indexPath.row]

    let courseId = doCourse.Id!
    var courseName = doCourse.Name!
    let courseAddress = doCourse.Address!
    let courseImage = doCourse.Image!
    let courseWish = doCourse.Wish!

    courseName = courseName.replacingOccurrences(of: "\t", with: "", options: .literal, range: nil)

    currentCell.imageView.kf.setImage(with: URL(string: courseImage))
    currentCell.textPrimary.text = courseName.capitalized
    currentCell.textSecondary.text = courseAddress.capitalized
    currentCell.buttonOpen.addTarget(...)
    currentCell.buttonFav.addTarget(...)

    return currentCell
    }
}

我现在正在尝试的是每个CELL上有两个按钮,一个打开记录的详细信息,另一个设置为真或假。

现在我需要获取当前记录的id并将其最喜欢的状态切换为true或false,或者使用id打开详细信息页面。我无法为按钮添加操作并使用ID执行收藏夹或打开详细操作。

在android中我通过在CustomBaseAdapter中添加clickListener来完成此操作,该行为每行或数据记录执行操作。我也需要在iOS中做同样的事情,但没有运气

我是iOS开发的新手,请帮忙

1 个答案:

答案 0 :(得分:3)

您需要为e,g

的每个按钮设置tag
currentCell.buttonOpen.tag = indexPath.row
currentCell.buttonFav.tag = indexPath.row
currentCell.buttonOpen.addTarget(self, action: #selector(self.buttonClicked), for: .touchUpInside)

你可以通过button.tag获取id,例如

func buttonClicked(_ sender: UIButton) {
  let doCourses: [DOCourses] = dataSources.total()
  let doCourse = doCourses[sender.tag]
 let courseId = doCourse.Id!
  print (courseId)
}