Определить, какой `View` был нажат на" Cell " - PullRequest
1 голос
/ 01 июня 2019

у меня есть три UIImageView на одном Cell, когда я нажимаю на любой из UIImageView в ячейке, я хочу определить, какой из них был нажат на onCellSelection, без размещения UITapGestureRecognizer на каждом 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
}

Ответы [ 2 ]

4 голосов
/ 02 июня 2019

Использование UITapGestureRecogniser (или UIButton) будет лучшим подходом.Эти классы предназначены для подобных задач.

Если вы все еще хотите использовать другой подход, добавьте метод к вашему подклассу ячейки (замените imageView1, imageView2, imageView3 на ваши собственные свойства)

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

Документы:

2 голосов
/ 01 июня 2019

Переопределить функцию начала касания. Этот метод вызывается каждый раз, когда пользователь касается экрана. Каждый раз, когда он вызывается, проверьте, не начались ли касания в том же месте, где находится изображение.

 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
}

Местоположение будет CGPoint. Вы должны быть в состоянии получить CGPoints для границ ваших изображений и затем определить, находится ли touchBegan в этих границах. Если вы хотите включить весь путь, которого коснулся пользователь, также есть способы сделать это, но начального прикосновения должно быть достаточно для того, что вы хотите.

...