Как установить родительский контроллер представления как объект, чтобы я мог вызвать один из его методов?
Мне нужно отправить данные в родительский контроллер представления; так (в родителе) я создал метод setLocWithName: loc:
сделать это. Как мне создать объект, который является родительским контроллером? Я старался parentViewController
так же как presentingViewController
(как показано ниже), но я получаю предупреждение:
Несовместимые типы указателей, инициализирующие "TDViewController *__strong" выражением типа "UIViewController *"
// set object of parent view controller
TDViewController *tDViewController = [[self navigationController] presentingViewController];
// get data
NSArray *locs = [[PLStore sharedStore] allLocs];
PL *setselectedLoc = [locs objectAtIndex:[indexpath row]];
// send data to parent view controller
[tDViewController setLocWithName:[setselectedLoc pLocName] loc:[setselectedLoc loc1]];
// Pop this view controller off the stack
[self.navigationController popViewControllerAnimated:YES];
2 ответа
Правильный способ сделать это с делегированием. TDViewController должен сделать себя делегатом PLViewController, что вы должны сделать непосредственно перед отправкой в PLViewController. PLViewController должен объявить протокол делегата с методом, который передает две части данных, которые вам нужны, обратно в TDViewController.
Чтобы ответить на ваш реальный вопрос, вы можете получить ссылку на TDViewController, получив контроллер с индексом 1 в стеке навигации (в вашем конкретном случае). Это действительно не очень хороший способ сделать это, так как вы можете изменить порядок контроллеров или добавить или вычесть контроллеры, но вот как вы это сделаете:
TDViewController *tDViewController = (TDViewController *)[[self.navigationController viewControllers] objectAtIndex:1];
Предполагая, что представляющие ViewController (или parentViewController?) На самом деле имеют тип TDViewController, вам просто нужно выполнить приведение к первой строке:
TDViewController *tDViewController = (TDViewController *)[[self navigationController] presentingViewController];