【问题标题】:Can't use UISplitViewController in a universal app?不能在通用应用程序中使用 UISplitViewController?
【发布时间】:2010-08-14 04:07:37
【问题描述】:

我无法让 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;
}

【问题讨论】:

    标签: iphone uikit uisplitviewcontroller


    【解决方案1】:

    首先,您不应该在 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;
    }
    

    【讨论】:

    • 内存管理和额外的 iVar 是对的。 shouldRotateToInterfaceOrientation: override 听起来也很棒,但它对我不起作用。你试过了吗?
    • 如果子类化 UISplitViewController 对您不起作用,请尝试将每个 UIViewController 子类化并覆盖 shouldRotateToInterfaceOrientation: 在每一个中。无论如何,这可能是最好的方法......
    • 是splitview子控制器的autorotate和release issue的结合。
    • 重要的是你不能使用initWithNibName:bundle:初始化UISplitViewController。它只是行不通。您必须改用init
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多