Ändern der zurück-button in iOS 7 deaktiviert swipe zurück navigieren
Ich eine iOS 7 app, wo ich bin Einstellung einer benutzerdefinierten Schaltfläche zurück, wie diese:
UIImage *backButtonImage = [UIImage imageNamed:@"back-button"];
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setImage:backButtonImage forState:UIControlStateNormal];
backButton.frame = CGRectMake(0, 0, 20, 20);
[backButton addTarget:self
action:@selector(popViewController)
forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
viewController.navigationItem.leftBarButtonItem = backBarButtonItem;
Aber dies deaktiviert die iOS 7 "wischen Sie nach Links, nach rechts" - Geste navigieren Sie zu dem vorherigen controller. Weiß jemand, wie kann ich eine benutzerdefinierte Taste und halten immer noch diese Geste aktiviert?
BEARBEITEN:
Ich versuchte, legen Sie den viewController.navigationItem.backBarButtonItem statt, aber dieses scheint nicht, zu zeigen, dass meine benutzerdefinierten Bild.
Ich bin noch nicht gefunden eine angemessene Lösung für dieses Problem?? Gibt es jemanden, der hat eine gute Lösung gefunden und erklären, warum das funktioniert??.
Wie über die Verwendung von gut gemachten third-party Bibliotheken: SwipeBack?
Wie über die Verwendung von gut gemachten third-party Bibliotheken: SwipeBack?
InformationsquelleAutor lehn0058 | 2013-09-27
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
WICHTIG:
Dies ist ein hack. Ich empfehle einen Blick auf diese Antwort.
Aufruf der folgenden Zeile nach der Zuweisung der
leftBarButtonItem
für mich gearbeitet:Edit:
Dies funktioniert nicht, wenn genannt in
init
Methoden. Es sollte aufgerufen werden, inviewDidLoad
oder ähnliche Methoden.Nach dem herunterladen der Beispiel-Projekt jetzt verstehe ich Ihr Problem. Der code funktioniert so lange, wie die Auflistung anzeigen ist der Inhalt nicht mehr als die horizontale Breite des view-Controllers. Sobald jedoch der Ansicht Sammlung wird horizontal scrollbare es überschreibt die interactivePopGestureRecognizer. Ich werde sehen, ob ich finden kann, ein work-around.
Ich habe Problem mit diesem code. Es funktioniert nicht eine lange Zeit, nach 5-10 back-klaut VC friert. Jede Lösung?
Timur Bernikowich ich erleben die gleiche.Hast du irgendwelche Gründe dafür?
Einstellung der Stellvertretung
self
entfernt von einem Objekt der Klasse_UINavigationInteractiveTransition
. Es liegt in der Verantwortung des Objekts, um sicherzustellen, dass der navigation-controller ist nicht gesagt, um pop-es ist zwar bereits im übergang. Noch wird untersucht, ob seine mögliche, um dies zu ermöglichen Geste oder nicht, wenn die Schaltfläche "zurück" ist Benutzerdefiniert.InformationsquelleAutor Paul Hunter
Verwenden Sie die backIndicatorImage und backIndicatorTransitionMaskImage Eigenschaften der UINavigationBar, wenn überhaupt möglich. Diese Einstellung auf eine UIAppearanceProxy können ganz einfach ändern Sie Verhalten über Ihre Bewerbung. Das Falten ist, können Sie nur diejenigen, die auf ios 7, aber das funktioniert denn Sie können nur die pop-Geste in ios 7 sowieso. Ihre normale ios 6 kann styling intakt bleiben.
Versuchen zu manipulieren, die interactivePopGestureRecognizer die Stellvertretung führt zu einer Reihe von Problemen.
topViewController
.Dies sollte in der Tat die akzeptierte Antwort.
Dies ist eine Lösung unter der Annahme, dass alles, was Sie tun möchten, ist ändern Sie die zurück-Taste Bild. Aber was, wenn Sie möchten, ändern Sie die zurück-Taste, text und/oder die Aktion, die beim klicken auf die zurück-Taste?
Sie wäre besser gedient werden, durch die Einstellung der UINavigationItem.leftBarButtonItem. Es gibt eine Vielzahl von Antworten, die gefunden werden können, durch die Suche leftBarButtonItem auf google oder stackoverflow.
Leider funktioniert das nicht auf iOS8. Die zurück-Taste, nicht sein Aussehen zu ändern, um meine eigene Bild.
InformationsquelleAutor Saltymule
Sah ich diese Lösung http://keighl.com/post/ios7-interactive-pop-gesture-custom-back-button/ die Unterklassen UINavigationController. Seine eine bessere Lösung als es mit der Fall, wo Sie wischen, bevor sich die Steuerung im Ort - die einen Absturz verursacht.
Zusätzlich dazu habe ich bemerkt, wenn Sie einen swipe auf der root-view-controller (nach dem drücken auf eines, und wieder zurück) die Benutzeroberfläche nicht mehr reagiert (auch gleiche problem in der Antwort oben).
So, dass der code in Unterklassen UINavigationController sollte ungefähr so Aussehen:
Funktioniert perfekt, vielen Dank!
DIE BESTE LÖSUNG IN DER GANZEN SEITE. FUNKTIONIERT BESTENS. DANK
Dies ist die richtige Antwort!
InformationsquelleAutor Nick H247
Benutze ich
welche Art von bug?
Einfach die beste Lösung!
Einfachste Lösung überhaupt.
yep, am besten. danke !
InformationsquelleAutor Albert Chu
Ich auch ausblenden, die zurück-Taste, und ersetzen Sie es mit einem benutzerdefinierten leftBarItem.
Entfernen interactivePopGestureRecognizer delegieren nach push-Aktion für mich gearbeitet:
Vielen Dank, dass mich wissen! Beschreiben Sie bitte das genaue Szenario? Ich konnte es nicht reproduzieren, wenn swiping das root-view-controller
Ich war in der viewDidLoad-Methode. Meine Letzte Lösung war eine andere Klasse zu sein, die Stellvertretung, die nur true zurück, für 'gestureRecognizerShouldBegin', wenn es mehr als eine Sicht-Steuerung in der nav-stack.
Toller workaround, danke
MrNickBarker keine Gründe, warum es friert ein, ich erlebe das gleiche
InformationsquelleAutor avishic
Dies ist aus http://stuartkhall.com/posts/ios-7-development-tips-tricks-hacks, aber es verursacht mehrere Fehler:
z.B. Wenn der rootViewController der navigationController anzeigt, führen Sie eine Streifbewegung von der linken Kante des Bildschirms, und Tippen Sie auf, etwas(SCHNELL) zu schieben anotherViewController in den navigationController, dann
So müssen Sie implementieren
UIGestureRecognizerDelegate
Methode inself.navigationController.interactivePopGestureRecognizer.delegate
wie diese:InformationsquelleAutor iwill
Hier ist swift3 version von Nick H247 Antwort
InformationsquelleAutor duan
Versuchen
self.navigationController.
interactivePopGestureRecognizer
.enabled = YES;
avishic könnten Sie das bitte gerecht zu erklären, warum die Einstellung der Delegierten arbeiten?..Ich komme auf das gleiche problem.
InformationsquelleAutor ilya n.
Ich nicht schreiben, aber der folgende blog hat mir sehr geholfen und gelöst meine Probleme mit der benutzerdefinierten navigation Taste:
http://keighl.com/post/ios7-interactive-pop-gesture-custom-back-button/
Zusammenfassend, er implementiert eine benutzerdefinierte UINavigationController verwendet, die die pop-Geste delegieren. Sehr sauber und tragbar!
Code:
Bearbeiten. Hinzugefügt fix für Probleme, wenn ein Benutzer versucht, wischen Sie nach Links, auf einem root-view-controller:
Ich bearbeitet habe, die Antwort mit einem Update, ich glaube ich implementiert, um dieses problem zu lösen. Ist zwar schon eine Weile, aber es macht Sinn. Grundsätzlich, wenn das top-view-controller ist der root-Ansicht-controller, dann werden wir reagieren nicht auf die 'interactivePopGestureRecognizer'
Er versteckt sich mein zurück-button
InformationsquelleAutor kgaidis
RootView
ChildView
InformationsquelleAutor PW486
Diese Logik zu halten, aktivieren oder deaktivieren Sie die swipe-Geste..
InformationsquelleAutor Muhammad Naeem Paracha
Ich hatte ein ähnliches problem, wo ich war, die Zuordnung der aktuellen view-controller als Delegierter für die interaktive pop-Geste, aber brechen würde die Geste in jedem Blick geschoben, oder sichten unterhalb der Ansicht in der nav-stack. Die Art, wie ich dies Problem gelöst war, war die Stellvertretung in
-viewDidAppear
, dann setzen Sie es auf null in-viewWillDisappear
. Dass dürfen meine anderen Ansichten korrekt funktionieren.InformationsquelleAutor Bill Burgess
Vorstellen, dass wir mit der Apple-Standard-master/detail-Projekt-Vorlage, wo master ist ein table-view-controller und Tippen Sie auf es wird die detail view controller.
Wir möchten, passen Sie die zurück-Taste, erscheint in der detail view controller. Dies ist, wie Sie die Bild, Bild Farbe, text, text-Farbe, und schriftart der zurück-Taste.
Ändern Sie die Bild, Bild, Farbe, text-Farbe oder schriftart Global, platzieren Sie die folgenden in einem Ort, genannt , bevor Sie Ihre view-Controller erstellt (z.B.
application:didFinishLaunchingWithOptions:
ist ein guter Ort).Beachten, können Sie
appearanceWhenContainedIn:
haben mehr Kontrolle über die view-Controller sind von diesen änderungen betroffen, aber Bedenken Sie, dass Sie nicht passieren können[DetailViewController class]
, weil es enthalten ist, innerhalb eines UINavigationController, nicht Ihre DetailViewController. Dies bedeutet, dass Sie brauchen, um eine Unterklasse UINavigationController wenn Sie möchten mehr Kontrolle über das, was betroffen ist.Anpassen-der text oder die schriftart/- Farbe einer bestimmten back-Taste Element, Sie muss in den MasterViewController (nicht der DetailViewController!). Dies scheint unintuitiv, weil der button erscheint in der DetailViewController. Allerdings, wenn Sie verstehen, dass die Art und Weise anpassen, es ist durch das festlegen einer Eigenschaft auf eine navigationItem, es beginnt mehr Sinn machen.
Hinweis: Versuch, die titleTextAttributes nach der Einstellung selbst.navigationItem.backBarButtonItem scheint nicht zu funktionieren, also müssen Sie festlegen, bevor Sie zuweisen, den Wert dieser Eigenschaft.
InformationsquelleAutor Senseful
Erstellen Sie eine Klasse 'TTNavigationViewController' die Unterklasse 'UINavigationController' und machen Sie Ihre bestehende navigation-controller dieser Klasse werden entweder in storyboard/Klasse, Beispiel-code in der Klasse -
InformationsquelleAutor Prakash Raj