2010-08-14 43 views
6

我無法讓UISplitViewController在通用應用程序中工作,我已經編寫了iPhone部分。作爲一種排除故障的方法,我決定從一個新項目開始,試着去做導致問題的一個動作,而且現在依然如此。在通用應用程序中不能使用UISplitViewController嗎?

如果我創建一個通用應用程序,並在iPad控制器中創建一個拆分視圖(在XIB或代碼中),那麼它顯示爲黑色(除非我設置背景色)。如果我在僅限iPad的應用程序中執行此操作,則顯示效果良好。

如果有人可以自己測試一下,看看他們是否得到同樣的東西,或者告訴我我哪裏出錯了,我會很感激。

  1. 在Xcode中,創建一個通用的「基於窗口」的應用程序。
  2. 進入iPad控制器並粘貼底部的代碼。

我得到的是一個黑屏,而不是分割視圖。相同的代碼適用於僅iPad的項目。我做錯了什麼,或者什麼配置錯了?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
    UISplitViewController *split = [[UISplitViewController alloc] initWithNibName:nil bundle:nil]; 

    UIViewController *vc1 = [[UIViewController alloc] initWithNibName:nil bundle:nil]; 
    vc1.view.backgroundColor = [UIColor redColor]; 

    UIViewController *vc2 = [[UIViewController alloc] initWithNibName:nil bundle:nil]; 
    vc2.view.backgroundColor = [UIColor blueColor]; 

    split.viewControllers = [NSArray arrayWithObjects:vc1, vc2, nil]; 

    [window addSubview:split.view]; 
    [window makeKeyAndVisible]; 

    [vc1 release]; 
    [vc2 release]; 
    [split release]; 

    return YES; 
} 

回答

3

首先,您不應該在didFinishLaunchingWithOptions中釋放您的拆分視圖。將它添加到你的界面(在UIWindow下)並且只在dealloc上釋放它。其次,子類UISplitViewController如下:

@interface MySplitViewController : UISplitViewController 
{ 
} 
@end 
@implementation MySplitViewController 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return YES; 
} 
@end 

三,你的didFinishLaunchingWithOptions應該是這樣的:

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

    split = [[MySplitViewController alloc] init]; 

    UIViewController *vc1 = [[UIViewController alloc] init]; 
    vc1.view.backgroundColor = [UIColor redColor]; 

    UIViewController *vc2 = [[UIViewController alloc] init]; 
    vc2.view.backgroundColor = [UIColor blueColor]; 

    split.viewControllers = [NSArray arrayWithObjects:vc1, vc2, nil]; 

    [window addSubview:split.view]; 
    [window makeKeyAndVisible]; 

    [vc1 release]; 
    [vc2 release]; 

    return YES; 
} 
+0

你是對內存管理和附加伊娃。 shouldRotateToInterfaceOrientation:覆蓋聽起來不錯,但它不適用於我。你有沒有嘗試過? – tonklon 2010-08-17 11:17:47

+0

如果子類化UISplitViewController不適合你,請嘗試子類化每個UIViewController並重寫shouldRotateToInterfaceOrientation:在每一箇中。這可能是最好的方法...... – ian 2010-08-18 08:12:49

+0

這是splitview subcontrollers的autorotate和release問題的結合。 – codepoet 2010-08-20 04:51:13

相關問題