С помощью кнопки в UICollectionViewCell, Как мне получить детализацию содержимого конкретной ячейки? - PullRequest
0 голосов
/ 19 января 2019

У меня addToCartButton в UICollectionViewCell. Что мне нужно сделать, так это получить подробную информацию о продукте определенной ячейки, когда пользователь нажал кнопку, и отобразить ее на другой UIViewController. Как это можно сделать простым и надежным способом?

enter image description here

Вот что я сделал:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = trendingProductCV.dequeueReusableCell(withReuseIdentifier: "TrendingProductsCVCell", for: indexPath) as? TrendingProductsCVCell
    cell?.trendingProductImage.downloadImages(url: trendingProductsDataArray[indexPath.row].images![0].source!)
    cell?.trendingProducttitle.text = trendingProductsDataArray[indexPath.row].title
    cell?.trendingProductSellingPrice.text =  trendingProductsDataArray[indexPath.row].salePrice
    cell?.struckTest(unstruckedText: trendingProductsDataArray[indexPath.row].regularPrice!)
    cell?.trendingAddToCartBtn.addTarget(self, action: #selector(addToCartBtnTapped), for: .touchUpInside)
    return cell!
}

@objc
func addToCartBtnTapped(){

}

Ответы [ 2 ]

0 голосов
/ 19 января 2019

вы можете определить протокол на collectionViewCell и запустить его, когда кнопка addToCard нажмет на каждую ячейку, и в вашем viewController орудии делегата:

protocol CollectionViewCellDelegate: class {
    func addtoCard(_ cell: TrendingProductsCVCell)
}

class TrendingProductsCVCell: UITableViewCell { 
    weak var delegate: CollectionViewCellDelegate?
    // ... the rest of your code

    @IBAction func addToCardButtonClicked(_ sender: UIButton) { //action of ***addToCard*** 
        delegate?.addToCard(self)
    }
}

class viewController: CollectionViewCellDelegate { //and what you want to implement
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = trendingProductCV.dequeueReusableCell(withReuseIdentifier: "TrendingProductsCVCell", for: indexPath) as? TrendingProductsCVCell
        cell.delegate = self
        // ... the rest of your code
        return cell
    }

    func addToCard(cell: TrendingProductsCVCell) {
        //do what you want with your cell and its content
    } 
}
0 голосов
/ 19 января 2019
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let productData = trendingProductsDataArray[indexPath.row]
    let cell = trendingProductCV.dequeueReusableCell(withReuseIdentifier: "TrendingProductsCVCell", for: indexPath) as? TrendingProductsCVCell
    cell?.trendingProductImage.downloadImages(url: productData.images![0].source!)
    cell?.trendingProducttitle.text = productData.title
    cell?.trendingProductSellingPrice.text =  productData.salePrice
    cell?.struckTest(unstruckedText: productData.regularPrice!)
    cell?.trendingAddToCartBtn.addTarget(self, action: #selector(addToCartBtnTapped(sender:)), for:.touchUpInside)

    return cell!
}

@objc func addToCartBtnTapped(sender:UIButton) {

    let buttonPosition:CGPoint = sender.convert(CGPoint.zero, to:self.tblUsers)
    let indexPath = self.tblUsers.indexPathForRow(at: buttonPosition)
    let productData = trendingProductsDataArray[indexPath.row]
}

Попробуйте это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...