touchesBegan und andere touch-events nicht immer erkannt im UINavigationController
Kurz: ich möchte, zu erkennen, dass eine Berührung des navigation-Controllers Titelleiste, aber Schwierigkeiten haben, eigentlich fangen alle berührt!
Alles erfolgt, ohne IB, ob das einen Unterschied macht.
Meine app delegieren .m-Datei enthält:
MyViewController *viewController = [[MyViewController alloc] init];
navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
[window addSubview:navigationController.view];
Gibt es ein paar andere subviews Hinzugefügt, um das Fenster in einer Weise, die overlays navigationController, wobei nur die Navigationsleiste angezeigt sind, sichtbar.
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 auch versucht, indem Sie diese Funktionen direkt in die app zu delegieren .m-Datei, aber die Konsole bleibt leer.
Was mache ich falsch?
Die gesamte Einrichtung meiner app ist ein UINavigationController, UIScrollView und UIPageControl Hinzugefügt, um das Fenster mit [window addSubview:...] in der app delegieren, in dieser Reihenfolge. Die ScrollView enthält dann weitere Ansichten, die mit dem eigentlichen Inhalt der app. Die Tasten des UINavigationController funktionieren, aber berührt auf den Titel nicht erkannt.
touchesEnded und begann, sind UIView Methoden nicht UIViewController
Daniel hat Recht... diese wird nie aufgerufen in einem UIViewController. Sie brauchen, um eine UIView-Unterklasse, mit diesen Methoden, und dann entweder zu weisen, dass sein viewController.anzeigen oder fügen Sie es zu der viewController die Ansicht als unteransicht (würden Sie wahrscheinlich tun, entweder von diesen wird in der loadView-Methode der viewController.
Ich habe versucht, die Zuordnung einer benutzerdefinierten viewController.anzeigen, aber das scheint nicht zu Holen, berührt auf der Navigationsleiste. Wenn ich loszuwerden, alle die andere Ansichten und lassen Sie einfach navigationController und den Blick von innen, es nur aufnimmt, berührt auf der Innenseite der Ansicht, aber nicht auf die Leiste.
touchesBegan/Endete nicht UIView Methoden sind, werden Sie UIResponder Methoden und ein UIViewController ist ein UIResponder.
touchesEnded und begann, sind UIView Methoden nicht UIViewController
Daniel hat Recht... diese wird nie aufgerufen in einem UIViewController. Sie brauchen, um eine UIView-Unterklasse, mit diesen Methoden, und dann entweder zu weisen, dass sein viewController.anzeigen oder fügen Sie es zu der viewController die Ansicht als unteransicht (würden Sie wahrscheinlich tun, entweder von diesen wird in der loadView-Methode der viewController.
Ich habe versucht, die Zuordnung einer benutzerdefinierten viewController.anzeigen, aber das scheint nicht zu Holen, berührt auf der Navigationsleiste. Wenn ich loszuwerden, alle die andere Ansichten und lassen Sie einfach navigationController und den Blick von innen, es nur aufnimmt, berührt auf der Innenseite der Ansicht, aber nicht auf die Leiste.
touchesBegan/Endete nicht UIView Methoden sind, werden Sie UIResponder Methoden und ein UIViewController ist ein UIResponder.
InformationsquelleAutor SaltyNuts | 2010-06-14
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, in Ermangelung einer besseren Idee, die ich anderen zugefügt Untersicht, um meine app, klar in der Farbe, platziert programmgesteuert über die Navigationsleiste Titel und verwendet eine benutzerdefinierte Klasse für die Ansicht mit relevanten touch-Methoden überschrieben. Funktioniert gut, aber die ich immer noch wünschte, es gäbe eine elegantere Lösung.
Nein, es ist perfekt so. Die Einbettung der Antwort in der Frage durch die Bearbeitung machen würde es viel schwieriger für uns, um die Lösung zu finden, wenn wir hatten das gleiche problem.
InformationsquelleAutor SaltyNuts
Des view-Controllers eingefügt, in der responder-Kette zwischen seinen managed-Ansicht und der superview:
(die UIViewController Dokumentation)
Ist es möglich, dass der managed view des Controllers ist, Essen alle die Ereignisse? Welche Sicht ist es?
InformationsquelleAutor Dirk
Hatte Mühe mit diesem, als meine benutzerdefinierte Ansicht war, tiefer in die view-Hierarchie. Stattdessen kletterte ich die responder-Kette, bis er eine findet
UIViewController
;InformationsquelleAutor Autonomy
versuchen Sie, die Methode userInteractionEnabled = JA zu deinem UIImageView
InformationsquelleAutor j2emanue
Sollten diese Methoden werden in der UIView-Unterklasse, die nicht die UIViewControllers...Die UIView erhalten die berührt, call-backs, dann können Sie ein Protokoll über die UIView und implementieren es auf dem UIViewController so die UIViewController erhalten einige rufen zurück, wenn der touch-events auftreten...Hier ist ein link, der darüber berichtet, Protokolle und wie Sie zu definieren und umzusetzen Protokolle Ref
InformationsquelleAutor Daniel