With button in UICollectionViewCell , How do I grab the content detail of the specific Cell?












1















I have addToCartButton in UICollectionViewCell. What I have to do is to grab the details of the product of the specific cell when the user tapped the button and list it to the another UIViewController. How can It be done in easy and reliable way?



enter image description here



Here is what I have done :



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(){

}









share|improve this question





























    1















    I have addToCartButton in UICollectionViewCell. What I have to do is to grab the details of the product of the specific cell when the user tapped the button and list it to the another UIViewController. How can It be done in easy and reliable way?



    enter image description here



    Here is what I have done :



    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(){

    }









    share|improve this question



























      1












      1








      1








      I have addToCartButton in UICollectionViewCell. What I have to do is to grab the details of the product of the specific cell when the user tapped the button and list it to the another UIViewController. How can It be done in easy and reliable way?



      enter image description here



      Here is what I have done :



      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(){

      }









      share|improve this question
















      I have addToCartButton in UICollectionViewCell. What I have to do is to grab the details of the product of the specific cell when the user tapped the button and list it to the another UIViewController. How can It be done in easy and reliable way?



      enter image description here



      Here is what I have done :



      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(){

      }






      ios swift uicollectionview






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Jan 19 at 10:07









      James Z

      11.1k71935




      11.1k71935










      asked Jan 19 at 6:33









      KiranKiran

      64




      64
























          2 Answers
          2






          active

          oldest

          votes


















          0














          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]
          }


          Try this






          share|improve this answer































            0














            you can define protocol on collectionViewCell and fire it when the addToCard button hits on each cell, and in your viewController implement of delegate:



            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
            }
            }





            share|improve this answer
























            • when you have button action then you can retrieve data easily with touch event or by sender tag, Its to complex to use delegate.

              – Khush
              Jan 21 at 3:47











            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54264670%2fwith-button-in-uicollectionviewcell-how-do-i-grab-the-content-detail-of-the-sp%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            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]
            }


            Try this






            share|improve this answer




























              0














              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]
              }


              Try this






              share|improve this answer


























                0












                0








                0







                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]
                }


                Try this






                share|improve this answer













                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]
                }


                Try this







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Jan 19 at 6:46









                KhushKhush

                1319




                1319

























                    0














                    you can define protocol on collectionViewCell and fire it when the addToCard button hits on each cell, and in your viewController implement of delegate:



                    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
                    }
                    }





                    share|improve this answer
























                    • when you have button action then you can retrieve data easily with touch event or by sender tag, Its to complex to use delegate.

                      – Khush
                      Jan 21 at 3:47
















                    0














                    you can define protocol on collectionViewCell and fire it when the addToCard button hits on each cell, and in your viewController implement of delegate:



                    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
                    }
                    }





                    share|improve this answer
























                    • when you have button action then you can retrieve data easily with touch event or by sender tag, Its to complex to use delegate.

                      – Khush
                      Jan 21 at 3:47














                    0












                    0








                    0







                    you can define protocol on collectionViewCell and fire it when the addToCard button hits on each cell, and in your viewController implement of delegate:



                    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
                    }
                    }





                    share|improve this answer













                    you can define protocol on collectionViewCell and fire it when the addToCard button hits on each cell, and in your viewController implement of delegate:



                    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
                    }
                    }






                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered Jan 19 at 7:29









                    Arash EtemadArash Etemad

                    615217




                    615217













                    • when you have button action then you can retrieve data easily with touch event or by sender tag, Its to complex to use delegate.

                      – Khush
                      Jan 21 at 3:47



















                    • when you have button action then you can retrieve data easily with touch event or by sender tag, Its to complex to use delegate.

                      – Khush
                      Jan 21 at 3:47

















                    when you have button action then you can retrieve data easily with touch event or by sender tag, Its to complex to use delegate.

                    – Khush
                    Jan 21 at 3:47





                    when you have button action then you can retrieve data easily with touch event or by sender tag, Its to complex to use delegate.

                    – Khush
                    Jan 21 at 3:47


















                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54264670%2fwith-button-in-uicollectionviewcell-how-do-i-grab-the-content-detail-of-the-sp%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Liquibase includeAll doesn't find base path

                    How to use setInterval in EJS file?

                    Petrus Granier-Deferre