2010-08-14 2 views
6

У меня возникли проблемы с запуском UISplitViewController в универсальном приложении, где я уже закодировал часть iPhone. В качестве метода устранения неполадок я решил начать с нового проекта и просто попытаться сделать одно действие, которое вызывает проблему, и оно все еще есть.Нельзя использовать UISplitViewController в универсальном приложении?

Если я создаю универсальное приложение, а в iPad-контроллере создаю разделенный вид (либо в XIB, либо в коде), то он отображается как черный (если не задан цвет фона). Если я сделаю это только в iPad-приложении, он отобразится просто отлично.

Я был бы признателен, если бы кто-нибудь мог проверить это самостоятельно и посмотреть, получают ли они то же самое, или скажите мне, где я ошибаюсь.

  1. В Xcode создайте универсальное приложение «на основе окон».
  2. Зайдите в контроллер iPad и вставьте код внизу.

То, что я получаю, это черный экран, а не разделенный вид. Тот же код работает в iPad-only. Что я делаю неправильно, или что настроено неправильно?

- (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

+0

Если подклассификация UISplitViewController не работает для вас, попробуйте подклассифицировать каждый UIViewController и переопределить shouldRotateToInterfaceOrientation: в каждом из них. Это, вероятно, лучший способ сделать это в любом случае ... – ian

+0

Это был авторотат субблоков splitview и проблема с выпуском. – codepoet

Смежные вопросы