ベースとして、JALの答えを使用して、私はこれを実装することができたあなたのUIViewController
の上UITabBar
オーバーレイがNO
にtranslucent
を設定することである必要はありませに対する彼らの鍵すでにタブを持つ既存の構造を持っていたアプリで
既存のビューでボタンを押した後にタブ内のSafariコントローラに入るようにし、Appleのデフォルトコードを使用するようにSafariコントローラを独自のウィンドウにポップしないようにしました。
キーはSFSafariViewController
の中で、既存のUITabBarController
のビューコントローラの配列にスワップすることでした。 Safariコントローラで完了ボタンが押されたときに戻るために、既存の元のビューコントローラをタブ#3(インデックス2)に保存しました。 [完了]ボタンをしたとき
NSMutableArray *viewArray = [NSMutableArray arrayWithArray:self.tabBarController.viewControllers];
self.savedController = [viewArray objectAtIndex:2];
[viewArray replaceObjectAtIndex:2 withObject:safariController];
self.tabBarController.viewControllers = viewArray;
[self setTabIconTitle];
は、その後、私はこのようにそのタブに元の表示に戻って入れ替えることができます:ここで
は、ボタンが押されたとき、私は私のタブを持つからSafariのコントローラに行くためにやったことですこのデリゲートの呼び出しを使用してSafariのコントローラに押された:
- (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];
}
私はtabBarController
ビューコントローラ配列のうちにコントローラを入れ替え、私は私のタブのアイコンやタブ名を失ったので、私はそれらを設定する必要がありました。ここで私はその問題を修正(タブアイコンをタッチされたときに、私のテーマを保持)する方法である:
- (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";
}
私はAppleがSFSafariViewController
がタブ内このような方法で使用することを意図していることを確認していないことを認めなければなりません、 SFSafariViewController
の現在の通常の動作が何であるかに基づいています。今後のiOSアップデートではこの動作が変更され、新しいiOSバージョンがBetaに移行したときには常にコードをテストすることに注意してください。