1

У меня есть mainViewController с container view. Я пытаюсь получить доступ к theMainViewController от container view.Доступ к контроллеру родительского представления

Вот мой код:

self.theMainViewController = (theMainViewController *)self.parentViewController; 

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:idx inSection:0]; 
[self.theMainViewController .tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom]; 

Это не работает. self.theMainViewController дает значение nil, когда я делаю nslog. Затем я заменил:

self.parentViewController 

к:

self presentingViewController 

и он дал мне те же результаты. Как я могу получить доступ к mainViewController от класса container view's?

Update

Это моя установка: Static table view inside UIViewController [Xcode 5] (. Я не могу добавлять изображения, так что изображение размещены в этом ответе, так же, как мои настройки)

+0

Покажите, как вы установили контейнер-контроллер и контроллеры вид ребенка. – rmaddy

+0

Обновлен вопрос – Jessica

+0

@Jessica вы можете переопределить иерархические контроллеры представлений. Вот большой [статья] (http://www.objc.io/issue-1/containment-view-controller.html), описывающий, как это сделать. – ozgur

ответ

2

Вы можете использовать «prepareForSegue "в контроллере родительского вида, чтобы передать себя в виде контейнера таким образом:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([[segue identifier] isEqualToString:@"containerview_myIdentifier"]) { 

     ContainerViewController *vc = [segue destinationViewController]; 
     [vc setReferenceToParentVC:self]; 
    } 
} 

Где вы создаете синтезированное свойство в ContainerViewController типа ParentViewController и установить это свойство к себе.

Вот что вы должны увидеть в раскадровке: enter image description here

+0

Какой тип объекта «ReferenceToParentVC»? – Jessica

+0

@Jessica Он должен быть «ParentViewController», например, один из моих: '@property (nonatomic) PagesViewController * referenceToRootViewController; 'Просто не забудьте объявить заголовок ParentViewController в голове контроллера представления контейнера, как этот' #import "PagesViewController.h" ' – Cole

+0

О, это мое плохое, я забыл, что это создаст циклический цикл зависимостей. Поэтому вместо этого объявляйте 'pacesViewController' как' @class pacesViewController'', а затем регулярно объявляйте его с '# import' в .m – Cole