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