У меня есть представление A, которое обрабатывает UITapGestureRecogniser. Когда это само по себе, все отлично работает.TapGestureRecogniser не получает вызов, когда subview
У меня есть другой вид B, который содержит шесть объектов View A. Когда я добавляю View B в свой ViewController, UITapGestureRecogniser перестает работать.
У меня есть isUserInteractionEnabled = true
на всех взглядах.
Может ли кто-нибудь определить, почему он не работает?
Как проверить, активированы ли tapGestures при касании?
Благодаря
Примечание: ViewController не имеет каких-либо UIGestureRecognisers на нем
SingleView
class QTSingleSelectionView: UIView {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialize()
}
override init(frame: CGRect) {
super.init(frame: frame)
initialize()
}
fileprivate func initialize() {
let tap = UITapGestureRecognizer(target: self, action: #selector(onTapListener))
addGestureRecognizer(tap)
}
func onTapListener() {
print("tap")
_isSelected.toggle()
setSelection(isSelected: _isSelected, animated: true)
}
}
Несколько представлений
class QTMutipleChoiceQuestionSelector: UIView {
var selectors: [QTSingleSelectionView] = []
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialize()
}
override init(frame: CGRect) {
super.init(frame: frame)
initialize()
}
fileprivate func initialize() {
for selector in selectors {
selector.removeFromSuperview()
}
selectors.removeAll()
guard let dataSource = dataSource else { return }
let count = dataSource.numberOfAnswers(self)
for index in 0..<count {
let selector = QTSingleSelectionView()
selector.frame = CGRect(x: 0, y: topMargin + heightOfSelector*CGFloat(index), width: frame.width, height: heightOfSelector)
selector.text = dataSource.mutipleChoiceQuestionSelector(self, textForAnswerAtIndex: index)
selector.selected = dataSource.mutipleChoiceQuestionSelector(self, isItemSelectedAtIndex: index)
selector.isUserInteractionEnabled = true
addSubview(selector)
}
}
}
ViewContro Мюллером
lazy var multipleChoiceView: QTMutipleChoiceQuestionSelector = {
let selector = QTMutipleChoiceQuestionSelector()
selector.dataSource = self
selector.isUserInteractionEnabled = true
return selector
}()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
view.addSubview(multipleChoiceView)
}
могли бы вы показать код? –
@ AndréSlotta Я добавил код, спасибо – ilan
Таким образом, проблема состояла в том, что не вызывал инициализатор init (frame: CGRect) вместо init() в представлениях, но вы отклонили мой ответ: «У меня нет проблемы с расположением взгляды ", я также упомянул в своих комментариях, чтобы проверить ваш мультивизор, если он принимает gestureRecognizer, но вы проголосовали за мой ответ! –