2016-06-26 7 views
3

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?

+0

Können Sie den CategoryViewButton als Unteransicht anzeigen? Wenn nicht, könnte es ein Mangel an Contraint-Problem sein. – Sethmr

+0

Der CategoryViewButton ist als Unteransicht sichtbar –

+0

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

Antwort

4

Für alle Neugierigen war das Problem, dass die Unteransicht mit Gestenerkennung außerhalb des Rahmens der Superview war. Das heißt, obwohl die Ansicht gezeichnet wurde, wurden die Gesten nicht erkannt.