2011-03-09 76 views
49

我已經注意到了iPhone應用大量的實例在應用程序委託self.window.rootViewController VS窗口addSubview

- (void)applicationDidFinishLaunching:(UIApplication *)application

[window addSubview: someController.view];(1)

相到

self.window.rootViewController = self.someController;(2)

是否有任何實際的理由使用一個在另一個?技術上是否正確?不要控制器具有等效的命令數(2)像

self.someController.rootController = self.someOtherController; // pseudocode

回答

48

UIWindowrootViewController屬性是與新iOS4的。

舊技術是使用addSubview

新推薦的技術是設置rootViewController

+7

爲什麼設置rootViewController比使用addSubview更值得推薦? – pepsi 2011-06-30 14:47:23

+1

@pepsi我可以告訴你,它在iOS 5.0上更具意義,它在NDA之下,所以我們不能在這裏討論它,在開發論壇上詢問,你會得到它,它與視圖控制器遏制有關。 – Zebs 2011-07-08 05:18:04

+1

一個可爭議的好處是,作爲一種財產,您可以在IB中設置它,而不是編寫代碼來執行關聯。 – TomSwift 2011-07-08 18:32:00

-1

崩潰是因爲你調用了一個不存在的方法,不是因爲你的變量沒有被初始化。

-setRootViewController在iOS 4.0之前不存在。使用

[self.window addSubview:self.tabBarController.view]; 代替。

或者,將您的目標平臺更新到4.0.2或更高版本。在這一點上,可能不到5%的用戶不使用iOS 4。

5

我用這個代碼:

rootViewController_ = [[RootViewController alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
    window_ = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
    if ([window_ respondsToSelector:@selector(setRootViewController:)]) { // >= ios4.0 
     [window_ setRootViewController:rootViewController_]; 
    } else { // < ios4.0 
     [window_ addSubview:rootViewController_.view]; 
    } 
1

我認爲:

self.window.rootViewController將根據狀態欄的高度調整rootViewController.view

但是如果你使用addSubview也不會

例如, 如果您將RootViewController設置爲NavigationController,則 的navigationCont滾子將是(0,0,320,480);

但是,如果您將RootViewController設置爲常見的UIViewController,則該navigationController將爲(0,0,320,460);

如果使用addSubview:兩個viewcontrollers將是(0,0,320,480)

,如果有通話中,狀態欄。它也爲你改變,當你使用setRoot ... 如果使用addSubview,子視圖大小不會與釋放改變

做一些試驗用不同的視圖的邊框顏色

+0

是的,它幫助我...... – 2013-02-12 10:03:38

+0

是有道理的...... – 2016-07-22 11:02:48

10

只是一個更新這個ios 6。

如果仍然使用 - [UIWindow addsubview:]樣板,那麼您現在可能會在控制檯中看到「應用程序窗口在應用程序啓動結束時有一個根視圖控制器」消息。隨着您的應用程序中的潛在旋轉問題和佈局問題。

像上面那樣設置窗口的rootViewController也會解決這個問題。

+0

是的,即使ViewController使用新的iOS6旋轉apis,我的視圖也顯示在錯誤的方向...直到我解決這個問題! – mattorb 2012-10-26 16:51:12

+0

爲了上帝的緣故!我有這個消息好幾個星期了,直到現在我還沒有找到合適的解決方案!謝謝 – SpaceDog 2012-11-05 18:48:36