Добавить навигационный контроллер для подробного просмотра в splitview - PullRequest
7 голосов
/ 23 сентября 2010

Я следую этому примеру: http://doronkatz.com/ipad-programming-tutorial-hello-world. Этот пример прекрасно работает.

Теперь я хочу 3 вкладки в splitview и для каждой вкладки новый навигационный контроллер.Но я не знаю, как это реализовать.Я перехожу к этому коду:

- (void)setDetailItem:(id)newDetailItem {
if (detailItem != newDetailItem) {
    [detailItem release];
    detailItem = [newDetailItem retain];

    // Update the view.
    navigationBar.topItem.title = detailItem;

    if ([detailItem isEqualToString:@"Test"]) {
        TestViewController *testViewController = [[TestViewController alloc] initWithNibName:@"TestView" bundle:nil];
        [self.navigationController pushViewController:testViewController animated:NO];
        [mapViewController release];

    }
    if ([detailItem isEqualToString:@"Test2"]) {

    }

}

if (popoverController != nil) {
    [popoverController dismissPopoverAnimated:YES];
}        

Но я знаю, что на самом деле мне не нужно использовать «pushviewcontroller», я просто хочу новый навигационный контроллер, начинающийся с этой точки, и так для каждой вкладки в splitview,Как я могу сделать это?Я знаю, что это действительно просто, но я не могу понять.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

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

Важно структурировать ваши контроллеры как дерево.

  • root: контроллер разделенного представления
    • представление списка: настольный контроллер (MasterViewController для выбора фруктов)
    • подробный вид: вкладка контроллера (вся информация о арбузе)
      • tab1: контроллер навигации
        • стр. 1: первая вкладка корневого контроллера (история арбузов)
      • tab2: контроллер навигации
        • стр. 1: корневой контроллер первой вкладки (карта арбузных ферм)
      • tab3: контроллер навигации
        • page3: корневой контроллер первой вкладки (рецепты арбуза)

С помощью этого шаблона вы можете создать структуру контроллера в viewDidLoad, но затем изменить содержимое страниц 1, 2, 3 при ответе на setDetailItem UINavigatorContoller имеет сообщение popToRootViewControllerAnimated, которое может сбросить предыдущий стек контроллера навигации для каждого из 3 контроллеров навигации. Когда я начал изучать ios development, я обнаружил, что настроить иерархию контроллеров в коде проще, чем с помощью конструктора интерфейсов. IB быстрее, когда вы получите концепции. Вы по-прежнему можете создать контроллер пера IB для контроллеров корневых представлений страницы 1,2,3.

хорошая ссылка: http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007457

0 голосов
/ 21 июня 2011

Если я вас правильно понимаю, у вас есть UISplitViewController, и вы хотите иметь три UINavigationController в качестве подробных видов. В этом случае будет работать следующее, если оно реализовано в вашем классе UISplitViewController:

    if ([detailItem isEqualToString:@"Test"]) {

        TestViewController *testViewController = [[TestViewController alloc] initWithNibName:@"TestView" bundle:nil];

        //since self.viewControllers is immutable, let's make our own temporary copy.
        NSMutableArray *tempArray = [self.viewControllers mutableCopy];

        //switcheroo with the new view controller
        [tempArray replaceObjectAtIndex:1 withObject:testViewController];

        // our new view controller is retained by the array, so let's release it
        [testViewController release];

        //set the new array to be displayed
        self.viewControllers = tempArray;

        //clean up - out mutableCopy returns a retained object
        [tempArray release];


    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...