7

SFSafariViewControllerをタブの内側にロードしたいので、タブバーはSafariビュー全体の下部にあります。UITabBarControllerの中にSFSafariViewControllerを表示することはできますか?

これは可能ですか?私は運でこれを試してみました:

[self.tabBarController presentViewController:sfController animated:YES completion:nil]; 

それはSafariのビューをフルスクリーンであること必要ですか?

答えて

0

ベースとして、JALの答えを使用して、私はこれを実装することができたあなたのUIViewControllerの上UITabBarオーバーレイがNOtranslucentを設定することである必要はありませに対する彼らの鍵すでにタブを持つ既存の構造を持っていたアプリで

既存のビューでボタンを押した後にタブ内の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に移行したときには常にコードをテストすることに注意してください。

2

私はこれをプログラムで達成することができました。

あなたAppDelegate.mで:

@import SafariServices; 

// ... 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 

    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 

    UITabBarController *tabBarController = [[UITabBarController alloc] init]; 
    tabBarController.tabBar.translucent = NO; 

    SFSafariViewController *firstVC = [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString:@"http://stackoverflow.com"]]; 

    firstVC.title = @"SFSafariViewController"; 

    UIViewController *secondVC = [[UIViewController alloc] init]; 
    secondVC.view.backgroundColor = [UIColor blueColor]; 

    secondVC.title = @"Blue VC"; 

    tabBarController.viewControllers = @[firstVC, secondVC]; 

    self.window.rootViewController = tabBarController; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 
関連する問題