J'ai une vue A qui gère UITapGestureRecogniser. Quand c'est tout seul, tout fonctionne bien.TapGestureRecogniser ne pas être appelé lors d'une sous-vue
J'ai une autre vue B qui contient six des objets View A. Lorsque j'ajoute View B à mon ViewController, le UITapGestureRecogniser cesse de fonctionner. J'ai isUserInteractionEnabled = true
sur toutes les vues.
Quelqu'un peut-il savoir pourquoi cela ne fonctionne pas?
Comment puis-je vérifier si les robinets sont activés au toucher?
Merci
Note: Le ViewController n'a pas encore de UIGestureRecognisers sur elle
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)
}
}
vues multiples
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 ller
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)
}
pourrait vous montrer un code? –
@ AndréSlotta j'ai ajouté le code, merci – ilan
Donc le problème était de ne pas appeler l'initialiseur init (frame: CGRect) au lieu de init() sur les vues, mais vous avez objecté ma réponse par 'je n'ai pas de problème avec l'emplacement de les vues ', j'ai aussi mentionné dans mes commentaires pour vérifier votre multiView s'il reçoit le gestureRecognizer, mais vous avez voté ma réponse! –