Не могу использовать UISPLitViewController в универсальном приложении?
-
28-09-2019 - |
Вопрос
У меня проблемы с возможностью получения UISPLITViewController, работающего в универсальном приложении, где я уже закодировал часть iPhone. В качестве метода устранения неисправностей я решил начать с нового проекта и просто попытаться сделать одно действие, вызывающее проблему, и она все еще есть.
Если я создаю универсальное приложение, а в контроллере iPad создайте разделенный вид (либо в XIB, либо в коде), то он выглядит как черный (если я не устанавливаю цвет фона). Если я сделаю это в приложении только для iPad, он отображается просто хорошо.
Я был бы признателен, если кто-то сможет проверить это самостоятельно и посмотреть, получите ли они то же самое или скажите мне, где я пойду не так.
- В Xcode создайте универсальное «окно на основе окна».
- Перейдите в контроллер 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;
}
Решение
Прежде всего, вы не должны освободить свой разрывный вид в DidfiniShlaunchingWittions. Добавьте его в свой интерфейс (под UIWindow) и освободить его только на DealLoc. Во-вторых, подкласс UISPLITViewController следующим образом:
@interface MySplitViewController : UISplitViewController
{
}
@end
@implementation MySplitViewController
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
@end
В-третьих, ваши DidfiniShlaunchingWittions должны выглядеть так:
- (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;
}