Я работаю над двумя представлениями, которые являются подклассами подкласса UITableViewCell. В базовом классе (подкласс UITableViewCell) я пытаюсь настроить распознаватель жестов таким образом, чтобы каждый из суперклассов мог изменить поведение (в конце концов, вызовите метод didTapped для своего делегата) касания.
Я написал следующий код. Я могу использовать #selector(tap)
, однако я думаю, что использование переменной вместо переопределения метода tap в каждом суперклассе - намного более чистый способ. Можно ли даже использовать что-то вроде #selector(tapFunc)
? Если нет, то какое будет самое чистое и лучшее с технической точки зрения решение?
class BaseCell: UITableViewCell {
@objc var tapFunc: () -> () = { () in
print("Tapped")
}
@objc func tap() {
print("TEST")
}
func setupBasicViews(withContent: () -> ()) {
let tapGestureRecoginzer = UITapGestureRecognizer(target: self, action: #selector(tapFunc))
contentView.isUserInteractionEnabled = true
contentView.addGestureRecognizer(tapGestureRecoginzer)
}
}
А затем два представления, которые строятся поверх этого:
class ViewA: BaseCell {
//don't want to do this
override func tap() {
//do stuff
}
func setup {
//setup everything else
}
class ViewB: BaseCell {
var delegate: ViewBProtocool?
func setup {
tapFunc = { () in
delegate?.didTapped(self)
}
//setup everything else
}