2013-03-03 51 views
0

我有一個iOS產品,有幾個不同的SKU,每個SKU都應該以不同的視圖控制器開始。我有不同的SKU由目標分開,這使我可以指定該版本產品所需的預處理器。是否有可能根據Target更改'初始視圖控制器'?

然而,我希望能夠做的一件事就是改變故事板中的'初始視圖控制器'值,以便構建不同的SKU,而無需手動檢查框的開啓或關閉。關於我正在建造的東西。

所以我的問題是,這可以通過目標,或以編程方式完成(所以我可以使用#ifdef與特定的SKU預處理器)?

在此先感謝!

回答

3

您必須使用故事板中分配的標識符在代碼中執行此操作。你可以創建一個目標定義頭文件或在您AppDelegate.m的開始做#ifdef S:

#ifdef TARGET_FOO 
#define INITIAL_VC_ID @"FOO_ID" 
[...] 

,然後在您的應用程序委託的application:didFinishLaunchingWithOptions:你可以這樣做:

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

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]]; 

[window setRootViewController:[mainStoryboard instantiateViewControllerWithIdentifier:INITIAL_VC_ID]]; 

[window makeKeyAndVisible]; 

return YES; 

這需要你從項目的Info.plist中刪除任何「主要故事情節」參考,因此UIKit默認不會加載它。

+0

謝謝馬丁,這個作品完美。唯一的區別是我使用了在目標設置中定義的預處理器(即INITIAL =「@ \」Initial_Target1 \「」),並將定義直接傳遞給'instantiateViewControllerWithIdentifier'。 – 2013-03-03 23:54:03

+1

快速附錄......對於任何看到這個的人。我建議在'application:didFinishLaunchingWithOptions:'的** end **這樣做,如果你在那裏做任何初始化初始視圖的處理,否則'viewDidLoad'在'application:didFinishLaunchingWithOptions:'出口之前被調用。 – 2013-03-03 23:56:25

+0

我通常會創建一個類似於'演示文稿管理器'的類,我設置並調用'setupWindow:'。這位經理知道一個保持對所有故事板(Main.storyboard,Login.storyboard,..)和所需標識符的引用(例如'presentLoginWithCompletionHandler:') – 2013-03-04 00:08:29

相關問題