Ich habe drei Registerkartencontroller. Von diesen Registerkarten-Controllern gibt es Schaltflächen, um zu verschiedenen Ansichten zu gelangen. Einige dieser Ansichten gelten für andere Ansichtscontroller, die mit den Tab-View-Controllern übereinstimmen, andere nicht. Diese verschiedenen Ansichten wiederum können zu anderen Ansichten führen. In Wirklichkeit könnte ein Benutzer auf diese Weise für immer neue Ansichten zuweisen. Die drei Hauptansichten sind NewsFeedVC ProfileVC und NotificationsVC. Dann enthält die sekundäre Ansicht "VotesListVC". Die beabsichtigte Verwendung besteht darin, dass ein Benutzer eine der drei Registerkarten auswählen und fortfahren kann, mehr View-Controller auf dem Stapel zu öffnen. Der Benutzer kann entweder die Navigation Zurück-Taste bis zur ursprünglichen Ansicht drücken oder eine andere Registerkarte drücken. Wenn Sie auf die andere Registerkarte tippen, sollte der Stapel von View-Controllern auf dem vorherigen Stapel freigegeben werden. Wenn Sie zur ursprünglichen Registerkarte zurückkehren, wird der Root-View-Controller angezeigt. Das Problem ist, dass mein Code unerhört hässlich geworden ist, als ich herausgefunden habe, welcher View Controller zuletzt war. In dieser App habe ich das Storyboard deaktiviert, sodass ich die gesamte Navigation selbst machen muss. Meine Frage ist, was ist der richtige Weg zu wissen, was auf dem Stapel ist und wie man es entfernt. Hier ist ein Teil des Codes, den ich verwende.mehrere Aufrufe zum Navigationsstapel
//for when the user wants to leave an individual post allViewControllers is an array
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: self.navigationController.viewControllers];
-(void)backTapped{
if (_postKey) {
ActivityViewController *newVC = [allViewControllers objectAtIndex:1];
[allViewControllers insertObject:newVC atIndex:0];
[allViewControllers removeLastObject];
self.navigationController.viewControllers = allViewControllers;
CATransition* transition = [CATransition animation];
transition.duration = 0.2f;
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromLeft;
[self.navigationController.view.layer addAnimation:transition
forKey:kCATransition];
[self.navigationController popViewControllerAnimated:NO];
}
}
//Here is how I handle leaving the profileVC, I have booleans determining what view it is from.
-(void)backTapped{
if (fromWorldFeed) {
WorldFeedViewController *newVC = [allViewControllers objectAtIndex:1];
newVC.retainTablePosition=true;
[allViewControllers insertObject:newVC atIndex:0];
[allViewControllers removeLastObject];
self.navigationController.viewControllers = allViewControllers;
[self.navigationController popViewControllerAnimated:NO];
}else if(_fromActivity){
ActivityViewController *newVC = [allViewControllers objectAtIndex:1];
[allViewControllers insertObject:newVC atIndex:0];
[allViewControllers removeLastObject];
self.navigationController.viewControllers = allViewControllers;
}else{
VotesListViewController *newVC =[allViewControllers objectAtIndex:1];
[allViewControllers insertObject:newVC atIndex:0];
[allViewControllers removeLastObject];
self.navigationController.viewControllers =allViewControllers;
}
CATransition* transition = [CATransition animation];
transition.duration = 0.2f;
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromLeft;
[self.navigationController.view.layer addAnimation:transition
forKey:kCATransition];
[self.navigationController popViewControllerAnimated:NO];
}
ich speichern Sie die Tab-Leiste Index, wenn es auch zu wissen, lädt, wenn sie sich ändert und dann kann ich loslassen irgendwie die alten Registerkarten Stapel anzuzeigen.
-(void)setTabBarIndex{
NSInteger tabBarIndex =self.tabBarController.selectedIndex;
NSString *tabBarStr=[@(tabBarIndex) stringValue];
[[NSUserDefaults standardUserDefaults]setObject:tabBarStr forKey:@"tabBarIndex"];
}
Dieser Code wäre schön, wenn der Benutzer nur auf eine oder zwei Ansichten höchstens navigieren kann. Allerdings habe ich Probleme, die schwer zu erklären sind, wenn der Benutzer tief in die App einsteigt. Gibt es eine Art, wie ich meinen App-Delegierten das verwalten lassen kann?
Warum haben Sie nicht einen Navigations-Controller pro Registerkarte und dann, wenn Sie Tabs wechseln, müssen Sie nur den vorherigen aktiven Registerkarten-Navigation-Controller zu seinem Stamm zu knallen. – Paulw11