Angenommen, ich habe eine UIButton
Ansicht in einer Registerkarte in meiner iPhone-App und möchte, dass eine andere Registerkarte in der Registerkartenleiste von geöffnet wird TabBarController
. Wie würde ich den Code dazu schreiben?
Ich gehe davon aus, dass ich die vorhandene Ansicht entlade und eine bestimmte Registerkartenansicht lade, bin mir aber nicht sicher, wie ich den Code genau schreiben soll.
iphone
objective-c
ios
uitabbarcontroller
rottendevice
quelle
quelle
Antworten:
Versuchen Sie diesen Code in Swift oder Objective-C
Schnell
Ziel c
quelle
-setSelectedViewController:
.Beachten Sie, dass die Registerkarten ab 0 indiziert sind. Das folgende Codefragment funktioniert also
geht zur fünften Registerkarte in der Leiste.
quelle
Meiner Meinung nach ist
selectedIndex
oderobjectAtIndex
ist nicht unbedingt der beste Weg, um die Registerkarte zu wechseln. Wenn Sie Ihre Registerkarten neu anordnen, kann eine fest codierte Indexauswahl Ihr früheres App-Verhalten beeinträchtigen.Wenn Sie die Objektreferenz des Ansichtscontrollers haben, zu dem Sie wechseln möchten, haben Sie folgende Möglichkeiten:
Natürlich müssen Sie sicherstellen, dass das
myViewController
wirklich in der Liste von stehttabBarController.viewControllers
.quelle
Sie können die
selectedIndex
Eigenschaft auf dem UITabBarController einfach auf den entsprechenden Index setzen, und die Ansicht wird geändert, sobald der Benutzer auf die Registerkarte tippt.quelle
selectedIndex
funktioniert bei Indizes> 4 auch nicht, funktioniert aberselectedViewController
.Ich habe versucht, was Disco S2 vorschlug, es war knapp, aber das hat letztendlich für mich funktioniert. Dies wurde aufgerufen, nachdem eine Aktion auf einer anderen Registerkarte ausgeführt wurde.
quelle
In Fällen, in denen Sie möglicherweise die Registerkarten verschieben, finden Sie hier einen Code.
quelle
Wie Stuart Clarks Lösung, aber für Swift 3:
Verwenden Sie es so:
Bitte beachten Sie, dass mein tabController hinter viewControllers auf viewController verweist. Ohne Navigationscontroller würde es so aussehen:
quelle
Ich wollte in der Lage sein anzugeben, welche Registerkarte von der Klasse und nicht vom Index angezeigt wird, da ich dachte, dass dies eine robuste Lösung darstellt, die weniger davon abhängt, wie Sie IB verkabeln. Ich habe weder Disco noch Joped gefunden, um zu funktionieren, also habe ich diese Methode erstellt:
Sie nennen es so:
Hoffe das ist hilfreich für jemanden
quelle
Mein Problem ist etwas anders. Ich muss von einem childViewController in der 1. TabBar zu einem Home ViewController in der 2. TabBar wechseln. Ich benutze einfach die Lösung im Obergeschoss:
Wenn Sie jedoch zur Startseite der 2. Registerkarte wechseln, ist der Inhalt unsichtbar. Und wenn ich debugge, viewDidAppear, viewWillAppear, viewDidLoad, wird keiner von ihnen aufgerufen. Meine Lösung besteht darin, den folgenden Code in den UITabBarController einzufügen:
quelle
Verwendung in
AppDelegate.m
Datei:quelle
Wie Stuart Clarks Lösung, jedoch für Swift 3 und Verwendung der Wiederherstellungskennung, um die richtige Registerkarte zu finden:
Verwenden Sie es wie folgt ("Menschen" und "Roboter" müssen auch im Storyboard für einen bestimmten viewController und dessen Wiederherstellungs-ID festgelegt sein, oder verwenden Sie die Storyboard-ID und aktivieren Sie "Storyboard-ID verwenden" als Wiederherstellungs-ID):
Bitte beachten Sie, dass mein tabController hinter viewControllers auf viewController verweist. Ohne Navigationscontroller würde es so aussehen:
quelle
quelle