Навигационный контроллер родительского представления

У меня есть представление, которое является частью tabBarController. В этом представлении у меня есть подвид с таблицей. При нажатии на ячейку в этой таблице я хотел бы получить доступ к navigationController родительского представления. Возможно ли это - и если да, то как?

Я думал, что это будет

BandDetailViewController *bandDetailViewController = [[BandDetailViewController alloc] initWithNibName:@"BandDetailViewController" bundle:nil];
bandDetailViewController.band = [thisDay objectAtIndex:indexPath.row];

[super.navigationController pushViewController:bandDetailViewController animated:YES];
[bandDetailViewController release];

Но это не работает.


person simonbs    schedule 20.02.2011    source источник


Ответы (2)


Когда вы создаете экземпляр своего контроллера подчиненного представления, передайте ссылку на контроллер навигации (super) и сохраните его в переменной экземпляра. Затем вы можете ссылаться на него, когда вам это нужно, в подразделе. Я безуспешно искал более элегантное решение этой и подобных проблем. Передача ссылки работает, поэтому я делаю это и стараюсь жить своей жизнью.

РЕДАКТИРОВАТЬ: добавить образец кода

В mainVC.m

 // this might be in didSelectRowForIndexPath:
 SubViewController *subVC = [[SubViewController alloc] init];
 subVC.superNavController = self.navController;
 [self.navigationController pushViewController:subVC animated:YES];

В SubViewController.h

 @property (nonatomic, retain) UINavigationController *superNavController;

В SubViewController.m

  @synthesize superNavController;


  // then, wherever you need it, say to pass to a sub-sub-viewController...
  [self.superNavController pushViewController:myNewVC animated:YES];
person Rayfleck    schedule 20.02.2011
comment
Работает идеально! Большое Вам спасибо. - person simonbs; 20.02.2011
comment
Не могли бы вы привести пример? - person dinesh; 13.01.2012

Когда вы вызываете -pushViewController, какой контроллер представления является самостоятельным? Если вы вызываете это из одного из ваших подвидов вкладок, у self, вероятно, нет ссылки на контроллер навигации из представления верхнего уровня, в которое вы его добавили.

Пожалуйста, взгляните на этот пост. Похоже, у этого парня такая же проблема.

Не удалось отправить pushViewController для подпредставления

person iHS    schedule 20.02.2011
comment
Спасибо, но ничего не происходит, когда это вызывается. Ни ошибки, ничего. - person simonbs; 20.02.2011
comment
При чтении вашей ссылки мне кажется, что добиться того, что я ищу, не реально, верно? Правильно, что мой self.navigationController имеет значение null в подпредставлении, но имеет допустимое значение в родительском представлении. Нет ли способа отправить navigationController в подпредставление из родительского представления? - person simonbs; 20.02.2011
comment
Я не уверен в этом, но должен быть какой-то обходной путь. Но в качестве альтернативы, что вы можете сделать, так это, когда вы выбираете строку, то есть в методе didSelectRowAt..., удаляете подпредставление из суперпредставления, и тогда ваше самое верхнее представление больше не должно быть табличным. Итак, нажмите на контроллер. я думаю должно работать - person iHS; 20.02.2011