在视图控制器中调用方法,该视图控制器是父节点的父节点

时间:2012-03-08 14:04:55

标签: iphone objective-c ios

我在调用不同视图控制器中的方法时遇到了一些麻烦。

这是我的设置: ViewController1 - > ViewController2 - > ViewController3

ViewController1使用WEPopoverController调用调用ViewController2:

UIViewController2 *viewCon2 = [[UIViewController2 alloc] init];

navPopover = [[WEPopoverController alloc] initWithContentViewController:viewCon2];
[navPopover presentPopoverFromRect:CGRectMake(0, 0, 50, 57)
                               inView:self.view
             permittedArrowDirections:UIPopoverArrowDirectionUp | UIPopoverArrowDirectionDown
                             animated:YES];

我希望ViewController3能够调用ViewController1中存在的方法。由于ViewController3没有直接从ViewController1初始化,我无法弄清楚如何使用委托方法来调用ViewController1的方法。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

课程之间有多种沟通方式,您可以阅读更多here

答案 1 :(得分:1)

在ViewController1 vieDidLoad中添加

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(methodFromViewController3) name:@"Message" object:nil];

(请删除dealloc中的观察者)

然后当你想从viewcontroler 3调用视图1中的方法时.. 发布通知

[[NSNotificationCenter defaultCenter] postNotificationName:@"Message"  object:nil userInfo:nil];

当您发布时,在第一个视图中调用通知 methodFromViewController3方法(您必须在视图控制器中添加它)...在您的情况下..您可以将其更改为您要调用的现有方法的名称..

答案 2 :(得分:0)

如果VC3引用了VC2,VC2引用了VC1,你可以在VC3中这样做:

ClassOfViewController2* vc2 = [self viewController2];
ClassOfViewController1* vc1 = [vc2 viewController1];
[vc1 myAwesomeMethod];