2017-07-05 7 views
0

Ich habe diese Funktion implementiert.Wie erkenne ich eine Berührung in navigationController.view?

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    guard let point = touches.first?.location(in: self.view) else { return } 

    for i in 0..<paths.count { 
     if paths[i].contains(point) { addViews(selectedView: i); break } 
    } 
} 

Meine Designer entschieden, dass sie einen kleinen Teil der Ansichten machen wollen, die ich hinzufüge, um die navigationBar zu überlagern. Das Problem ist, dass ich nach dem Hinzufügen der Ansichten zur navigationController.view statt dessen die Berührungen nicht mehr erkennen kann. Ich habe versucht Ort (in: self.navigationController.view) und das hat nicht funktioniert. Bevor ich in das Kaninchenloch von endlosen verschiedenen Dingen gehe, die funktionieren könnten, hat jemand eine einfache Antwort für mich? navigationBar overlay example

Antwort

0

Während navigationController nominell ViewController ist, wird der 'view' outlet normalerweise nicht verwendet und wahrscheinlich nicht in die Responder-Kette eingefügt.

Meine Lösung bestand darin, eine benutzerdefinierte Ansicht (im Storyboard) als Ausgang für navigationItem.titleView für den UIViewController zu erstellen.

Sie können die benutzerdefinierte Ansicht in viewDidLoad() (statt Storyboard) einrichten

self.navigationItem.titleView = myCustomView; 

In viewDidLoad setze ich wie eine Geste:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleStatusTap:)]; 
[chatTitleView addGestureRecognizer:singleTap]; 
+0

ich deutlicher hätte sein sollen. TapRecognizer arbeiten nur mit Ansichten und ich benutze speziell einen UIBezierPath, um den Tap zu erkennen, da es sich um mehrere Ebenen innerhalb derselben Ansicht handelt. Ich bearbeite und posten ein Bild, damit es leichter zu verstehen ist. – Sethmr

+0

Cool, ich könnte versuchen, die Schichten zurück in die ViewController.view zu verschieben und entweder die Navigationsleiste ausblenden, oder entfernen Sie die ViewController von der NavigationController. – FryAnEgg

Verwandte Themen