splitViewController с двумя протоколами связывания NavigationController - PullRequest
2 голосов
/ 10 марта 2011

РЕДАКТИРОВАТЬ: добавлен исходный проект

-> Я загрузил пример проекта, который ясно показывает мою дилемму, которую можно найти здесь <- </a>

Я создал приложение на основе Split View. Затем я добавил второй UINavigationController в DetailViewController внутри MainWindow.xib.

Затем я открываю новые подклассы UIViewController при нажатии на элемент панели инструментов. Я использую следующий код для проведения поп:

DocumentDetailVC *DetailViewController = [[DocumentDetailVC alloc] initWithNibName:@"DocumentDetailVC" bundle:[NSBundle mainBundle]];
[detailViewController.detailNavController pushViewController:DetailViewController animated:YES];

DocumentsVC *RRequestViewController = [[DocumentsVC alloc] initWithNibName:@"DocumentsVC" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:RRequestViewController animated:YES];

Это работает. У меня возникла проблема: как передать информационные или функциональные вызовы с главной стороны разделенного вида на детальную часть разделенного вида?

Если я представляю UIViewController с помощью следующего метода:

DocumentDetailVC *RRequestViewController = [[DocumentDetailVC alloc] initWithNibName:@"DocumentDetailVC" bundle:[NSBundle mainBundle]];
RRequestViewController.delegate=self;
RRequestViewController.modalPresentationStyle = UIModalPresentationCurrentContext;
[RRequestViewController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[self presentModalViewController:RRequestViewController animated:YES];
[RRequestViewController release];
RRequestViewController = nil;

Я могу завершить обратный поиск по протоколу, как и предполагалось.

DocumentDetailVC, при загрузке через pushViewController иерархия выглядит следующим образом:

NSLog([NSString stringWithFormat:@"%@",self]); 
//self = <DocumentDetailVC: 0x4e0d960>
NSLog([NSString stringWithFormat:@"%@",self.parentViewController]);
//self.parentViewController = <UINavigationController: 0x4e0ce30>
NSLog([NSString stringWithFormat:@"%@",self.parentViewController.parentViewController]);
//self.parentViewController.parentViewController = <UISplitViewController: 0x4e0d0f0>

Спасибо за вашу помощь. Эта проблема поглощает мою жизнь!

-> Я загрузил пример проекта, который ясно показывает мою дилемму, которую можно найти здесь <- </a>

1 Ответ

4 голосов
/ 12 апреля 2011

Хорошо, я знаю, что очень поздно для ответа, но этот ответ, я думаю, идеален и работает. Попытайся. Откройте свой RootViewController.h, вверху напишите эту строку:

#import "Left.h"
#import "Right.h"

в @interface RootViewController напишите эти строки

Left *lefty;
Right *righty;

после этого объявить свойство как,

@property (nonatomic, retain) Left *lefty;
@property (nonatomic, retain) Right *righty;

перейти к файлу ROOTVIEWCONTROLLER.M, синтезировать как

@synthesize lefty;
@synthesize righty;

после этого в RootViewController.m просто замените вашу функцию на эту

    - (IBAction)myBtnPushed{
    NSLog(@"myBtnPushed");


    lefty = [[Left alloc] initWithNibName:@"Left" bundle:[NSBundle mainBundle]];
    righty = [[Right alloc] initWithNibName:@"Right" bundle:[NSBundle mainBundle]];

    lefty.delegate=righty;
    [self.navigationController pushViewController:lefty animated:YES];

    [detailViewController.navigationController pushViewController:righty animated:YES];


}

в delloac напиши это,

[lefty release];
lefty = nil;
[righty release];
righty = nil;

Готово, запустите ваше приложение. Я проверил, это сделано.

...