在通用应用程序中无法使用UISplitViewController?

cod*_*oet 6 iphone uikit uisplitviewcontroller

我无法让UISplitViewController在我已编码iPhone部分的通用应用程序中工作.作为一种故障排除方法,我决定从一个新项目开始,只是尝试做一个导致问题的动作,它仍然是.

如果我创建一个通用应用程序并在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;
}
Run Code Online (Sandbox Code Playgroud)

ian*_*ian 3

首先,您不应该在 didFinishLaunchingWithOptions 中释放分割视图。将其添加到您的界面(在 UIWindow 下)并仅在 dealloc 时释放它。其次,子类化 UISplitViewController 如下:

@interface MySplitViewController : UISplitViewController
{
}
@end
@implementation MySplitViewController
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}
@end
Run Code Online (Sandbox Code Playgroud)

第三,您的 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;
}
Run Code Online (Sandbox Code Playgroud)