[英]TWO StoryBoards, ONE Tab Bar Controller
因為我們正在組建團隊,所以我們確實需要在iOS應用程序項目中擁有多個故事板。
我在某處讀到,如果你使用的是Tab Bar Controller,你就不能擁有多個故事板,但我相信我已經成功了。
我的問題是:
我有兩個故事板, Main.Storyboard
和Settings.storyboard
。 請注意,在MAIN中,我將入口點嵌入到新的Tab Bar Controller中,並通過Interface Builder添加了兩個視圖。
和:
從程序上講 ,我想添加第三個選項卡,該選項卡將轉到另一個故事板中的UIViewController
。 我用以下代碼完成了這個(在Main的ViewController代碼中的viewDidLoad中):
var settingsStoryboard:UIStoryboard = UIStoryboard(name: "Settings", bundle: nil)
var initialViewController:UIViewController = settingsStoryboard.instantiateViewControllerWithIdentifier("SettingsMain") as UIViewController
var viewsInTBC = self.tabBarController?.viewControllers
viewsInTBC?.append(initialViewController)
self.tabBarController?.viewControllers = viewsInTBC
令人驚訝的是,它有效! 當我點擊視圖控制器中的第三個項目時,我實際上可以看到View(盡管它沒有顯示圖標或文本) - 這讓我想到了我的上一個問題:
如果你想正確設置圖標,你應該:
UIViewController
附加到您的UITabBarController
。 或者只是以編程方式添加按鈕(XML代碼):
<!--Settings-->
<scene sceneID="Cac-NB-uhR">
<objects>
<navigationController definesPresentationContext="YES" id="BkC-WO-8Bx" sceneMemberID="viewController">
<tabBarItem key="tabBarItem" title="Settings" image="icoAxis" id="PEg-DC-QVf"/>
<navigationBar key="navigationBar" contentMode="scaleToFill" id="4RT-g8-Hp3">
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<connections>
<segue destination="bvJ-l1-eMt" kind="relationship" relationship="rootViewController" id="FJJ-h4-ftX"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Ane-ce-dgm" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="947" y="1037"/>
</scene>
一開始我在main.storyboard中得到了我的導航控制器。 現在從UITabBarViewController
派生:
- (void)viewDidLoad {
[super viewDidLoad];
UIStoryboard *settingsStoryboard = [StoryboardManager getSettingsStoryboard];
UINavigationController *navigationController = [settingsStoryboard instantiateInitialViewController];
NSMutableArray *arr = [self.viewControllers mutableCopy];
[arr addObject:navigationController];
[self setViewControllers:arr];
}
這是一個好習慣嗎? 是的。 如果您在項目中使用故事板,並且您的項目覆蓋了一個故事板中保存的數十個視圖控制器可能會導致:
你看到代碼中沒有任何東西嗎? 你的代碼看起來很好。 唯一可能讓我擔心的是你直接使用故事板的名稱。 如果您在多個地方使用設置,您應該“打包”將控制器放在單獨的方法/類中。 如果您將重命名故事板名稱可能會出現問題 - 那么您將不得不找到所有更改它們的事件。 如果你會錯過其中一個,那么可能會出現一些問題。 無論如何,我不認為提取這種方法是強制性的。
你能預見到任何錯誤嗎? 我沒有看到任何可能發生的問題。
是的,這很實用。 將故事板分離到模塊是個好主意。
這個項目可以為您節省大量時間,而不是黑客攻擊自己: RBStoryboardLink 。 作者對使用故事板的提示進行了很好的撰寫: UIStoryboard Best Practices
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.