簡體   English   中英

ios:如何使用StoryBoards從ViewController打開Tab Bar控制器

[英]ios: How open Tab Bar controller from ViewController using StoryBoards

我這樣做,想要從登錄頁面打開標簽欄控制器,如果它已經第一次登錄然后通過登錄頁面並在Spalsh后打開標簽欄控制器

意味着如果用戶在應用程序第一時間登陸,則應該是這樣的:1。啟動2.登錄頁面3.成功登錄打開標簽欄控制器有4個選項卡

如果用戶已登錄,則1. Splash 2.標簽欄控制器

在此輸入圖像描述

我試圖通過ViewDidLoad方法中的以下代碼打開Tab Bar控制器

UITabBarController *tbc = [self.storyboard instantiateViewControllerWithIdentifier:@"TripMapViewer"];
    tbc.selectedIndex=0;
   [self presentViewController:tbc animated:YES completion:nil];

但它給出了錯誤

2014-02-06 19:55:43.849 ProjNew [1065:907] - [TripMapViewer setSelectedIndex:]:無法識別的選擇器發送到實例0x1d5600b0

如果我刪除tbc.selectedIndex = 0; 它什么都不做,就像這樣停留在Splash屏幕上

UITabBarController *lbc = [self.storyboard instantiateViewControllerWithIdentifier:@"TripMapViewer"];
   [self presentViewController:lbc animated:YES completion:nil]; 

請建議我如何從View Controller打開標簽欄

看來TripMapViewer是某個Tab的Storyboard ID而不是UITabBarController ,請確保它確實有效

如下面的代碼MainTabBarUITabBarController Storyboard ID ,它完美地運行

UITabBarController *tbc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainTabBar"];
tbc.selectedIndex=0;
[self presentViewController:tbc animated:YES completion:nil];

除非您正在制作動畫,否則您不需要啟動畫面控制器。 此示例使用NSUserDefaults記住它是否首次登錄。

在您的應用程序委托中提出以下內容:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
   {


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

        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

        if(![[NSUserDefaults standardUserDefaults] dictionaryForKey:@"someKey"]){
            UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"registerViewController"];
            self.window.rootViewController = viewController;
        } else {
            UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"mainViewController"];
            self.window.rootViewController = viewController;
        }

        [self.window makeKeyAndVisible];



         return YES;
  }

如果你決定必須為啟動畫面設置一個viewcontroller,那么你可以在那里放置相同的代碼。

實例化的VC不是TabBarController的事實解釋了崩潰。 該代碼向storyboard請求常規vc,將其轉換為UITabBarController ,然后向其發送消息setSelectedIndex :它沒有實現,因為它不是標簽欄控制器。

至少獲得你想去的地方的第一步是將故事板中的標識添加到標簽欄控制器(TripMapViewer是其中一個標簽)。 然后實例化,崩潰應該消失。

在設計層面,請在此處查看我的問題和答案,了解如何進行登錄和啟動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM