splitViewController с двумя протоколами связи NavigationController


EDIT: добавлен исходный проект

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

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

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

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>
Спасибо за вашу помощь. Эта проблема поглощает всю мою жизнь!

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

1 2

1 ответ:

Хорошо, я знаю, что очень поздно для ответа, но этот ответ, я думаю, идеальный и рабочий. Попробовать его. Откройте свой 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];


}

В деллоаке напишите это,

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

Все готово, запускайте приложение. Я проверил, все готово.