UISplitViewController программно без nib/xib

Я обычно создаю свои проекты без IB-материала. Первая вещь, которую я делаю, состоит в том, чтобы снять изоляцию со всех ссылок на xibs, выходы обновили plist и т.д. и т.д. Никакие проблемы, работает отлично (в моем мире)!

Теперь, я просто установил 3.2 и попытался разработать свое первое приложение для iPad. Выполняя ту же процедуру как прежде, я создал находящийся в UISplitView проект приложения и снял изоляцию со всего IB-материала. Кроме того, я следовал за разделом в справочных документах Apple: Создавая Контроллер Представления Разделения Программно, но тем не менее, Основное представление никогда не показывают, только представление Детали (независимо от того, что ориентация). Я действительно попытался тщательно просмотреть это, но я не могу понять то, что я пропустил.

Существует ли рабочий пример UISplitViewController без перьев, плавающих вокруг где-нибудь? Я погуглил, но не мог найти никого. Или Вы знаете то, что я, вероятно, пропустил?

46
задан Cœur 28 August 2017 в 04:13
поделиться

1 ответ

Объявите свой splitviewcontroller в заголовке делегата, используйте что-то подобное в своем didfinishlaunching

. Убедитесь, что вы добавили UISplitViewControllerDelegate в заголовочный файл detailViewController и что у вас есть методы делегата. не забудьте импортировать соответствующие файлы заголовков

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

    splitViewController = [[UISplitViewController alloc] init];

    rootViewController *root = [[rootViewController alloc] init];
    detailedViewController *detail = [[detailedViewController alloc] init]; 

    UINavigationController *rootNav = [[UINavigationController alloc] initWithRootViewController:root];

    UINavigationController *detailNav = [[UINavigationController alloc] initWithRootViewController:detail];

    splitViewController.viewControllers = [NSArray arrayWithObjects:rootNav, detailNav, nil];
    splitViewController.delegate = detail;

    [window addSubview:splitViewController.view];

РЕДАКТИРОВАТЬ - согласно отличному предложению Скотта ниже, не добавляйте в подвид Windows, вместо этого

    [self.window setRootViewController:(UIViewController*)splitViewController];  // that's the ticket
    [window makeKeyAndVisible];
    return YES;
}


//detailedView delegate methods
- (void)splitViewController:(UISplitViewController*)svc 
     willHideViewController:(UIViewController *)aViewController 
          withBarButtonItem:(UIBarButtonItem*)barButtonItem 
       forPopoverController:(UIPopoverController*)pc
{  
    [barButtonItem setTitle:@"your title"];



    self.navigationItem.leftBarButtonItem = barButtonItem;
}


- (void)splitViewController:(UISplitViewController*)svc 
     willShowViewController:(UIViewController *)aViewController 
  invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
    self.navigationItem.leftBarButtonItem = nil;
}

Я также предпочитаю код для IB; -)

59
ответ дан 26 November 2019 в 20:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: