Ich habe ein Problem, den UITapGestureRecognizer in meiner benutzerdefinierten UIView.to ordnungsgemäß zu funktionieren. CategoryViewButton, die eine UITapGestureRecognizer im init fügt hinzu: Ich habe eine Ansicht erstelltSubview Gesture Recognizer wird nicht aufgerufen
class CategoryViewButton: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.handleTap))
self.addGestureRecognizer(tapGesture)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func handleTap() {
print("Hello again")
}
}
Diese Gestenerkenner funktioniert ohne Problem, wenn sie direkt in einem View-Controller hinzugefügt. Wenn ich jedoch ein CategoryViewButton als Unteransicht einer anderen benutzerdefinierten Ansicht hinzufüge, wird die Methode zur Erkennung von Gesten nicht aufgerufen. Mein subview:
class CategoryView: UIView, CategoryButtonDelegate {
var button : CategoryViewButton?
override init(frame: CGRect) {
super.init(frame: frame)
button = CategoryViewButton(frame: CGRect(x: 10, y: 0, width: 40, height: 25))
self.addSubview(button!)
self.bringSubview(toFront: button!)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Wenn ich eine Kategorieansicht in einem View-Controller zu erstellen, die handleTap() Funktion nicht aufgerufen wird. Was vermisse ich?
Können Sie den CategoryViewButton als Unteransicht anzeigen? Wenn nicht, könnte es ein Mangel an Contraint-Problem sein. – Sethmr
Der CategoryViewButton ist als Unteransicht sichtbar –
Es ist entweder etwas in einer Ihrer internen Klassen oder die Gestenerkennung funktioniert nicht, wenn es in einer untergeordneten Klasse verwendet wird. Ich würde versuchen, einen weiteren Gestenerkenner in der Kindklasse für den Button einzurichten und zu sehen, ob er erkannt wird. – Sethmr