Пейзаж UISplitViewController при использовании UINavigationController в деталях - PullRequest
2 голосов
/ 10 мая 2011

Я занимаюсь разработкой приложения для iPad / Universal и столкнулся с проблемой обработки UINavigationController в качестве основного подробного представления в UISplitViewController.То, что я хочу знать, - это как добавить кнопку контроллера по умолчанию в подробный контроллер в горизонтальной ориентации.

Определение

Контроллер разделения вида был определен следующим образом:

splitViewController = [[UISplitViewController alloc] init];

SideController *root = [[[SideController alloc] init] autorelease];
DetailController *detail = [[DetailController alloc] init];
InserisciDatiController *calcolo = [[[InserisciDatiController alloc]
                                     initWithNibName:@"InserisciDatiNuovi"
                                     bundle:[NSBundle mainBundle]]
                                    autorelease];

UINavigationController *rootNav = [[[UINavigationController alloc] initWithRootViewController:root]autorelease];
UINavigationController *calcoloNav = [[[UINavigationController alloc] initWithRootViewController:calcolo] autorelease];

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

и позже я освобождаю все освобождаемые объекты.Я использую SideController как своего рода индекс для детального контроллера.У него есть табличное представление, и, щелкая каждую строку, я обновляю главный контроллер представления детали.Каждый новый контроллер всегда является экземпляром UINavigationController.

Обновление сведений

myAppDelegate *delegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate];
UINavigationController *nav = (UINavigationController *)[delegate.splitViewController.viewControllers objectAtIndex:1];
[nav setViewControllers:[NSArray arrayWithObjects:controller, nil]];

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

Обработка альбомной ориентации

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

- (void)splitViewController:(UISplitViewController*)svc
     willHideViewController:(UIViewController *)aViewController
          withBarButtonItem:(UIBarButtonItem*)barButtonItem
       forPopoverController:(UIPopoverController*)pc

А также, когда я помещаю новый контроллер в контроллер навигации, кнопка возврата по умолчаниюпоявится на панели инструментов.В таком случае, как мне справиться с созданием кнопки?

Обновление

Пожалуйста, не говорите мне, что никто никогда не сталкивался с подобными проблемами!Как вы разрабатываете приложения для iPad?Соб ...

Ответы [ 3 ]

1 голос
/ 11 мая 2011

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

В делегате контроллера с разделенным видом я реализовал splitViewController:willHideViewController:withBarButtonItem:forPopoverController: method this way:

- (void)splitViewController:(UISplitViewController*)svc
     willHideViewController:(UIViewController *)aViewController
          withBarButtonItem:(UIBarButtonItem*)barButtonItem
       forPopoverController:(UIPopoverController*)pc
{
    barButtonItem.title = NSLocalizedString(@"menu", nil);

    myAppDelegate *app = (myAppDelegate *)[[UIApplication sharedApplication] delegate];

    UINavigationController *nav = [app.splitViewController.viewControllers objectAtIndex:1];
    UIViewController *ctrl = [nav.viewControllers objectAtIndex:0];

    if (!ctrl.navigationItem.backBarButtonItem && !ctrl.navigationItem.leftBarButtonItem) {
        ctrl.navigationItem.leftBarButtonItem = barButtonItem;
    }
}

Здесь я представляю элемент панели кнопок, который будет отображать всплывающее окно, представляющее контроллер вида сбоку, если и только если контроллер навигации не показывает кнопку возврата или другую пользовательскую левую кнопкуitem.

Надеюсь, это кому-нибудь поможет!

0 голосов
/ 26 мая 2011

Я думаю, что причина того, что вы не получили хороших ответов, заключается в том, что действительно трудно понять вашу проблему, то есть ваш вопрос мог бы быть более ясным. Итак, сначала позвольте мне понять, правильно ли я понял проблему. Проблема в том, что вы не знаете, как справиться со случаем, когда вы нажимаете что-то на вашем навигационном контроллере, и на нем должны отображаться как кнопка «Назад», так и кнопка разделения вида?

Если это так, то, как мы решили эту проблему, так это то, что кнопка разделения вида видна только в корне контроллера навигации. В любом случае боковой контроллер обычно имеет отношение только к корневому контроллеру подробного вида.

Если я неправильно понял вашу проблему или мое решение не применимо к вашему проекту, пожалуйста, дайте мне знать.

РЕДАКТИРОВАТЬ: Так что, если вы настаиваете на этом, вот способ сделать это:

toolbar = [[UIToolbar alloc] initWithFrame:(UIInterfaceOrientationIsPortrait(interfaceOrientation)) ? CGRectMake(0, 0, 768, 44) : CGRectMake(0, 0, 703, 44)];
toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
[self.navigationController.navigationBar addSubview:toolbar];

Вкл. viewWillDisappear:

[self setToolbarHidden:YES animated:animated];

и viewWillAppear:

[self setToolbarHidden:NO animated:animated];

Теперь у вас есть панель инструментов, к которой вы можете добавить что угодно. Ну, все, что можно добавить к UIToolbar, в любом случае, это почти что угодно.

0 голосов
/ 23 мая 2011

Я считаю, что Слава Буштрук из Alterplay разработал то, что вы ищете, и использовал это в своей библиотеке APSplitViewController .

...