Как вызвать функцию / метод в родительском контроллере представления - PullRequest
2 голосов
/ 05 марта 2011

У меня есть MyViewController, который имеет UINavigationController в качестве подпредставления, а UINavigatioController имеет CustomView, вытолкнутый в стек.В CustomView я хочу вызвать метод в MyViewController .. поэтому я попытался:

UINavigationController *main = (UINavigationController*)[self parentViewController];    
MyViewController *parentContainer = (MyViewController*)[main parentViewController];
[parentContainer myParentMethod];

этот код неверен.

Ответы [ 2 ]

1 голос
/ 05 марта 2011

Свойство parentViewController работает только для контроллера навигации, контроллера панели вкладок или в модальных отношениях представления. Хотя объект MyViewController имеет представление объекта UINavigationController в качестве подпредставления, это не означает, что MyViewController является parentViewController объекта UINavigationController.

Если вам нужно сохранить этот дизайн и вам необходим доступ к объекту MyViewController из объекта CustomView, лучший способ сделать это - позволить объекту CustomView иметь слабую ссылку на объект MyViewController (например, delegate свойства).

0 голосов
/ 10 июня 2018

Определите следующий макрос для вашего ребенка .m

#define parentVC (\
(^UIViewController*(void){\
UIViewController *viewController = nil;\
for (UIView *next = [self isKindOfClass:[UIViewController class]]?[((UIViewController *)self).view superview]:[((UIView *)self) superview]; next; next = next.superview) {\
UIResponder *nextResponder = [next nextResponder];\
if ([nextResponder isKindOfClass:[UIViewController class]]) {\
viewController = (UIViewController *)nextResponder;\
break;\
}\
}\
return viewController;\
})()\
)

Затем в вашем child-vc просто приведите указанный макрос к родительскому типу класса и выполните нужный метод, например:

[(MyParentController *)parentVC myParentMethod];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...