Mit JAL Antwort als Basis, ich war in der Lage, dies zu implementieren Ich selbst in einer App, die bereits bestehende Struktur mit Tabs hatte.
Ich wollte Tab 3 in einen Safari-Controller innerhalb der Registerkarte gehen, nachdem eine Schaltfläche auf der vorhandenen Ansicht gedrückt wurde, und den Safari-Controller nicht in ein eigenes Fenster wie Apple-Standard-Code.
Der Schlüssel war, in einer in die bestehende UITabBarController
Array von View-Controller zu tauschen. Ich habe den vorhandenen Original-View-Controller auf Tab. 3 (Index 2) gespeichert, um zu diesem zurückzukehren, wenn die Schaltfläche Fertig auf dem Safari-Controller gedrückt wurde. Safari-Controller gehen in aus mit meinem Tab
Hier ist, was ich tat, als eine Taste gedrückt wurde:
NSMutableArray *viewArray = [NSMutableArray arrayWithArray:self.tabBarController.viewControllers];
self.savedController = [viewArray objectAtIndex:2];
[viewArray replaceObjectAtIndex:2 withObject:safariController];
self.tabBarController.viewControllers = viewArray;
[self setTabIconTitle];
Dann konnte ich auf dieser Registerkarte wie folgt auf die ursprüngliche Ansicht wechseln zurück, wenn die Schaltfläche Fertig war gedrückt diese Delegierten Anruf auf den Safari-Controller verwenden: in einem aus dem tabBarController
-view-Controller-Array,
- (void)safariViewControllerDidFinish:(SFSafariViewController *)controller
{
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
NSMutableArray *viewArray = [NSMutableArray arrayWithArray:tabBarController.viewControllers];
[viewArray replaceObjectAtIndex:2 withObject:self.savedController];
tabBarController.viewControllers = viewArray;
[self setTabIconTitle];
}
Als ich Controller getauscht verlor ich meine Tabulatorsymbol und Registernamen, also musste ich diejenigen setzen. Hier ist, wie ich dieses Problem behoben (und hielt meine Theming, wenn die Registerkarte Symbol berührt wurde):
- (void)setTabIconTitle
{
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
UITabBar *tabBar = tabBarController.tabBar;
UITabBarItem *marketplaceTab = [tabBar.items objectAtIndex:2];
marketplaceTab.image = [[UIImage imageNamed:@"tab2-icon"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
marketplaceTab.selectedImage = [UIImage imageNamed:@"tab2-icon"];
marketplaceTab.title = @"My Tab";
}
Ich muss zugeben, dass ich nicht sicher bin, dass Apple beabsichtigt, dass die SFSafariViewController
in einem Register auf diese Weise verwendet werden, basierend auf dem, was das normale Verhalten des Aufrufens SFSafariViewController
derzeit tut. Beachten Sie jedoch, dass zukünftige iOS-Updates dieses Verhalten möglicherweise ändern und Ihren Code immer testen, wenn neue iOS-Versionen in die Betaversion aufgenommen werden.