вызов родительского метода экземпляра ViewController

i m добавление пользовательского представления в контроллер просмотра по следующему коду

[bTVC addSubview:customView];

теперь я хочу вызвать метод экземпляра parent viewController в классе пользовательского вида, как это

[self.parentViewController instanceMethod];

это возможно ? Как я могу это сделать ?

0
nl ja de
создать объект родительского представления и использовать его для вызова его методов
добавлено автор IronManGill, источник
но это будет означать создание нового объекта. Не могу ли я использовать существующий объект ViewController, на котором было добавлено пользовательское представление?
добавлено автор Subbu, источник

2 ответы

«нормальный» метод должен состоять в том, чтобы реализовать свойство (не сохраненное) делегата, указывающее на родительский viewController, но вы можете предпочесть использовать что-то вроде этого:

-(MyCustomUIViewController*)findParentUIViewControllerInSuperViews:(UIView*)myView {
    for (UIView* next = [myView superview]; next; next = next.superview) {
        UIResponder* nextResponder = [next nextResponder];
        if ([nextResponder isKindOfClass:[MyCustomUIViewController class]]) {
            return (MyCustomUIViewController*)nextResponder;
        }
    }
    return nil;
}

теперь просто звоните:

MyCustomUIViewController* myParentViewController = (MyCustomUIViewController*)[self findParentUIViewControllerInSuperViews:self];
[myParentViewController instanceMethod];

во всяком случае, я также рекомендую вам узнать, как работает делегат, это полезно во многих случаях, и вам обязательно понадобится это рано или поздно ...

4
добавлено
Большое спасибо ... это решило мою проблему !!!
добавлено автор Subbu, источник

There is no addSubview method in NSViewController. You can find it in NSView. if bTVC is an instance of NSView (or a subclass of) you can get what you call parent view by sending superview to self : [self superview] or self.superview. It'll return bTVC in your example. NSViewController works differently you can read full documentation here

0
добавлено
извините, я использую UIViewController и UIView
добавлено автор Subbu, источник
К сожалению, плохо. Сожалею...
добавлено автор Pyroh, источник