rileva quale ‘View’ è stato cliccato su una ‘Cell’

ho tre UIImageView su un singolo Cell quando faccio clic su una qualsiasi delle UIImageView sulla cella voglio rilevare quale è stato cliccato su onCellSelection, senza posizionare un UITapGestureRecognizer su ogni UIImageview

func SocialViewRow(address: SocialMedia)-> ViewRow<SocialMediaViewFile> {

let viewRow = ViewRow<SocialMediaViewFile>() { (row) in

    row.tag = UUID.init().uuidString
    }
    .cellSetup { (cell, row) in
        //  Construct the view
        let bundle = Bundle.main
        let nib = UINib(nibName: "SocialMediaView", bundle: bundle)

        cell.view = nib.instantiate(withOwner: self, options: nil)[0] as? SocialMediaViewFile
        cell.view?.backgroundColor = cell.backgroundColor
        cell.height =  { 50 }
        print("LINK \(address.facebook?[0] ?? "")")

        cell.view?.iconOne.tag = 90090

        //self.itemDetails.activeURL = address

        let openFace = UITapGestureRecognizer(target: self, action: #selector(QuickItemDetailVC.openFace))
        let openT = UITapGestureRecognizer(target: self, action: #selector(QuickItemDetailVC.openTwit))
        let you = UITapGestureRecognizer(target: self, action: #selector(QuickItemDetailVC.openYouYub))

         cell.view?.iconOne.addGestureRecognizer(openFace)

         cell.view?.iconTwo.addGestureRecognizer(openT)
         cell.view?.iconThree.addGestureRecognizer(you)



        cell.frame.insetBy(dx: 5.0, dy: 5.0)
        cell.selectionStyle = .none

    }.onCellSelection() {cell,row in

     //example   
    //print(iconTwo was clicked)


}


return viewRow
}

EN From: Detect which `View` was clicked on a `Cell`

More similar articles:

6 Comments

  1. ignora la funzione touchesha iniziato. questo metodo viene chiamato ogni volta che l’utente tocca lo schermo. ogni volta che viene chiamato, controllare se i tocchi sono iniziati nella stessa posizione di un’immagine.

     override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
         let touch = touches.first!
         let location = touch.location(in: self)
         //check here, include code that compares the locations of the image
    }

    posizione sarà un CGPoint. si dovrebbe essere in grado di ottenere i CGPoints per i limiti delle immagini e quindi determinare se il touchBegan in quei limiti. se si desidera includere l’intero percorso che l’utente ha toccato, ci sono modi per farlo anche, ma il tocco iniziale dovrebbe essere sufficiente per quello che si desidera.

    1. questo non risponde completamente alla mia domanda, anche se la sua una buona idea onCellSelection che ha un cell e row è possibile rilevare quale vista è stato cliccato utilizzando solo queste variabili
  2. @Chris io non voglio usare UITapGestureRecogniser perché devo creare un riconoscimento diverso per ciascuno dei UIImageView che voglio prevenire.

  3. usare UITapGestureRecogniser (o UIButton) sarebbe un approccio migliore. queste classi destinate a compiti come questo.

    se si desidera ancora utilizzare un approccio diverso, aggiungere il metodo alla sottoclasse cellulare (sostituire imageView1, imageView2, imageView3 con le proprie proprietà)

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
      guard let touch = touches.first else { return }
      let point = touch.location(in: view)
      if imageView1.frame.containsPoint(point) {
        // code for 1st image view
      } else if imageView2.frame.containsPoint(point) {
        // code for 2nd image view
      } else if imageView3.frame.containsPoint(point) {
        // code for 3rd image view
      }
    }

    Docs: Docs:

Leave a Reply

Your email address will not be published. Required fields are marked *