如何在父视图控制器中调用函数/方法

时间:2011-03-05 03:55:52

标签: objective-c ios4

我有一个MyViewController,它有一个UINavigationController作为子视图,UINavigatioController在堆栈上弹出了一个CustomView。我想要做的是在CustomView中调用MyViewController中的方法..所以我尝试了这个:

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

此代码不正确。

2 个答案:

答案 0 :(得分:1)

parentViewController属性仅适用于导航控制器,选项卡栏控制器或模式表示关系。虽然MyViewController对象具有UINavigationController对象的视图作为子视图,但这并不意味着MyViewController是UINavigationController对象的parentViewController。

如果必须保留此设计并需要从CustomView对象访问MyViewController对象,最好的方法是让CustomView对象具有对MyViewController对象的弱引用(如delegate属性)。

答案 1 :(得分:0)

在您的孩子.m

中定义以下
production:
  service: CloudfrontS3
  access_key_id: ""
  secret_access_key: ""
  region: ""
  bucket: ""

然后在你的child-vc中将所述宏转换为父类类型并执行你想要的方法,如下所示:

#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;\ })()\ )