我有一个MyViewController,它有一个UINavigationController作为子视图,UINavigatioController在堆栈上弹出了一个CustomView。我想要做的是在CustomView中调用MyViewController中的方法..所以我尝试了这个:
UINavigationController *main = (UINavigationController*)[self parentViewController];
MyViewController *parentContainer = (MyViewController*)[main parentViewController];
[parentContainer myParentMethod];
此代码不正确。
答案 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;\
})()\
)