簡體   English   中英

通過UITabBarController打開新故事板的正確方法

[英]Proper Way to Open a New Storyboard through UITabBarController

我們正在努力將主故事板拆分成較小的故事板,以使源代碼控制合並更加容易。 關於從UITabBar加載新的故事板的正確方法的任何想法?

到目前為止,這是我們自定義子類UITabBarController中的內容:

UITabBarItem *cardsTabItem = [self.tabBar.items objectAtIndex:kTabBarIndexCards];

    cardsTabItem.image = [[UIImage imageNamed:@"navCardsOff"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    cardsTabItem.selectedImage = [[UIImage imageNamed:@"navCardsOn"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    cardsTabItem.imageInsets = UIEdgeInsetsMake(-5, 0, 5, 0);
    cardsTabItem.titlePositionAdjustment = UIOffsetMake(0, -5);

我之前做過同樣的事情,但是使用了UITabBarController。 在那種情況下,即使其中一個故事板僅包含一個視圖控制器,我們每個選項卡按鈕都有一個故事板。 我認為無論您使用的是UITabBarController還是響應選項卡欄委托,答案都是相同的。 對於單擊的每個按鈕,確定要加載的視圖控制器位於哪個情節提要中:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"leftButtonStoryboard" bundle:[NSBundle mainBundle]];
UIViewController *vc = [storyboard instantiateInitialViewController];

//or

UIStoryboard *otherVC = [storyboard instantiateViewControllerWithIdentifier:@"CameraViewController"];

然后,您可以展示它,推動它或其他。

就我而言,由於我使用的是UITabBarController,因此所有這些操作都是在控制器初始化期間為所有不同的按鈕完成的。

默認情況下,它很可能會方便地命名您在情節提要中使用的所有不同視圖控制器(情節提要ID),我通常以viewController類命名它們,因此我不必記住我叫它的名字。

我還建議您在嘗試實例化另一個視圖控制器時避免使用self.storyboard屬性,因為您可能最終會遇到在選項卡之間共享控制器的情況。 明確說明要從中加載控制器的情節提要可以幫助提高可讀性並避免錯誤。

編輯-一個更具體的示例:

您需要做的是設置UITabViewController的viewControllers屬性,我可以在其init方法中進行此操作。 例如

- (id)initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
    UIViewController *one = [mainStoryboard instantiateViewControllerWithIdentifier:@"VC1"];
    UIViewController *two = [mainStoryboard instantiateViewControllerWithIdentifier:@"VC2"];

    self.viewControllers = @[one,two];
    }
return self;
}

如果您是在代碼本身中編寫它,或者正在使用情節提要,則可以使用此技術。 請注意,如果您已經通過情節提要掛鈎了其他視圖控制器,則除非您在此實例化它們,否則它們將變得松散。 您也可以使用setViewControllers:animation:方法。

用於創建自定義標簽欄項目的代碼(底部的按鈕)可能應該放在各個視圖控制器中,並分配給其tabBarItem屬性。 UITabBarController將使用該屬性來創建樣式正確的按鈕。 如果您不提供該屬性,則會從1開始獲得默認按鈕。

暫無
暫無

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

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