Frage

Kurz gesagt, möchte ich eine Berührung auf dem Navigationscontroller titlebar erkennen, aber Probleme haben eigentlich alle berührt gar Fang!

Alles ist ohne IB durchgeführt, wenn das einen Unterschied macht.

Meine app Delegaten .m-Datei enthält:

MyViewController *viewController = [[MyViewController alloc] init];
navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
[window addSubview:navigationController.view];

Es gibt ein paar andere Subviews dieses Fenster in einer Art und Weise hinzugefügt, die Navigation Overlays nur die Navigationsleiste sichtbar bleibt.

MyViewController ist eine Unterklasse von UIViewController und seine .m-Datei enthält:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
 for (UITouch *touch in touches) {
  NSLog(@"ended\n");
 } 

}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
 for (UITouch *touch in touches) {
  NSLog(@"began\n");
 } 
}

Ich habe versucht, diese Funktionen auch direkt in AppDelegate der .m-Datei setzen, aber die Konsole bleibt leer.

Was mache ich falsch?

War es hilfreich?

Lösung

Nun, mangels einer besseren Idee, fügte ich eine andere subview meiner app, klar in der Farbe, programmatisch über die Navigationsleiste Titel platziert und eine benutzerdefinierte Klasse für diese Ansicht mit relevanten Touch Methoden überschrieben verwendet. Funktioniert gut, aber die ich wünschte, noch gibt es eine elegantere Lösung.

Andere Tipps

View-Controller in die Responderkette zwischen seiner verwalteten Ansicht eingeführt wird, und der Super:

  

Da View-Controller fest an den Ansichten gebunden sind, sie zu verwalten, sind sie Teil der Antwortkette auch Griff Veranstaltungen genutzt. View-Controller selbst sind Nachkommen der UIResponder Klasse und in die Antwortkette zwischen der verwalteten Ansicht und seiner Superview eingefügt. Wenn also die Ansicht durch einen View-Controller verwalten nicht ein Ereignis behandeln, es geht um das Ereignis zu seinem View-Controller, der dann die Möglichkeit hat, das Ereignis der Handhabung oder die Ansicht der Superview weitergeleitet werden.

(die UIViewController Dokumentation )

Ist es möglich, dass die verwaltete Ansicht des Controllers alle Ereignisse isst? Welche Art von Sicht ist es?

Wir hatten Probleme mit diesem, wie meine benutzerdefinierte Ansicht tiefer in der Ansichtshierarchie war. Stattdessen stieg ich die Responder-Kette, bis es eine UIViewController findet;

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    // Pass to top of chain
    UIResponder *responder = self;
    while (responder.nextResponder != nil){
        responder = responder.nextResponder;
        if ([responder isKindOfClass:[UIViewController class]]) {
            // Got ViewController
            break;
        }
    }
    [responder touchesBegan:touches withEvent:event];
}

versuchen Sie, die Methode userInteractionEnabled = YES auf Ihre UIImageView

sollten diese Methoden in die nicht die UIViewControllers Unterklasse UIView gestellt werden ... Die UIView werden die Berührungen Rückrufe erhalten, dann können Sie ein Protokoll über die UIView machen und es auf der UIViewController implementieren, so dass die UIViewController wird einige Rückruf erhalten wenn die Berührungsereignisse auftreten ... Hier ist ein Link, dass die Gespräche über Protokolle und wie sie definieren und implementieren sie Protokolle Ref

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top