Как использовать addTarget с метками, imageview или uiview? - PullRequest
0 голосов
/ 21 февраля 2020

При использовании ячеек таблицы мы реализуем кнопки и связываем действия, используя «addTarget» с кнопкой, как показано ниже

cell.button1.addTarget(self, action: #selector(actionforbutton(_:)), for: .touchUpInside)

как мы можем связать другие свойства, такие как метки, UIImageView или UIView из ячейка таблицы аналогичным образом выполняет определенные действия, так как я не могу найти «addTarget» при использовании меток, UIImageView или UIView

Ответы [ 6 ]

0 голосов
/ 21 февраля 2020

Что вы можете сделать на самом деле, есть две распространенные практики, позволяющие контролировать ViewCels, так как это представления, которые вы можете просто создавать, и расширения, чтобы сократить рабочее время. Например;

//This enum can be extended due to demand
enum GestureRecognizerType {
    case Tap
    case Pinch
    case Rotate
}

extension UIView {
func addRecognizer(_ gType:GestureRecognizerType, handleGesture:Selector, _ controller:UIViewController){
    var recognizer:UIGestureRecognizer!
    switch gType {
    case .Pinch:
        recognizer = UIPinchGestureRecognizer(target: controller, action: handleGesture)
    case .Rotate:
          recognizer = UIRotationGestureRecognizer(target: controller, action: handleGesture)
    case .Tap:
          recognizer = UITapGestureRecognizer(target: controller, action: handleGesture)
    }
    self.addGestureRecognizer(recognizer)
}

Тогда звоните куда хотите. Использование может быть таким:

override func viewDidLoad(){
    super.viewDidLoad
    let view = UIView()
    view.addRecognizer(.Tap, handleGesture: #selector(handleTap(_:)), self)

}
@objc func handleTap(_ recognizer:UITapGestureRecognizer){
    //Handle when the view tapped
}

Другая практика может быть обработать все внутри вашего пользовательского класса ячейки и дать им распознаватели, когда они установлены с помощью didSet.

0 голосов
/ 21 февраля 2020

Я попытаюсь объяснить подход, используя customView типа UIView.

В вашем методе TableViewCell's awakeFromNib() добавьте UITapGestureRecognizer к customView с помощью target как self и selector как соответствующий метод, вызываемый при нажатии customView, customViewTapped(_:) в приведенном ниже коде.

class TableViewCell: UITableViewCell {
    @IBOutlet weak var customView: UIView!

    override func awakeFromNib() {
        super.awakeFromNib()
        let gesture = UITapGestureRecognizer(target: self, action: #selector(customViewTapped(_:)))
        self.customView.addGestureRecognizer(gesture)
    }

    @objc func customViewTapped(_ gesture: UITapGestureRecognizer) {
        print("customView Tapped")
    }
}

То же самое вы можете сделать для UILabel, UIImageView и другие элементы вида.

0 голосов
/ 21 февраля 2020

Если вы хотите добавить UITapGestureRecognizer в tableview or collectionview cell, то добавьте только target в cellForItemAt or cellForRowAt. Выделение и инициализация должны быть помещены в awakeFromNib пользовательского класса ячейки! Если вы создадите UITapGestureRecognizer в cellForRowAt, он будет инициализироваться каждый раз, когда вызывается cellForRowAt, и это не очень хорошая практика.

0 голосов
/ 21 февраля 2020

Вы можете использовать UITapGestureRecognizer на UILabel, UIImageView et c.

@IBOutlet weak var lblStatus: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()

    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap))
    lblStatus.isUserInteractionEnabled = true
    lblStatus.addGestureRecognizer(tapGesture)


}

@objc func handleTap(sender: UITapGestureRecognizer) {
    guard let a = (sender.view as? UILabel)?.text else { return }
    print(a)

}
0 голосов
/ 21 февраля 2020

Вы можете использовать UITapGestureRecognizer

Вот пример кода:

  let tap = UITapGestureRecognizer(target: self, action: #selector(actionforView(_:)))
  VIEW.addGestureRecognizer(tap)
  VIEW.isUserInteractionEnabled = true
0 голосов
/ 21 февраля 2020

Чтобы добавить UITapGestureRecognizer:

In viewDidLoad:

let gesture = UITapGestureRecognizer(target: self, action: #selector(detectTappedToLabel))
        yourLabel.addGestureRecognizer(gesture)

и затем объявить функцию

@objc func detectTappedToLabel(){
    //Do whatever you want when tapped
}

Надеюсь, это поможет ...

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