我通过以下代码将自定义视图添加到视图控制器
[bTVC addSubview:customView];
现在我想像这样在自定义视图的类中调用父视图控制器的实例方法
[self.parentViewController instanceMethod];
那可能吗 ?我怎样才能做到这一点 ?
我通过以下代码将自定义视图添加到视图控制器
[bTVC addSubview:customView];
现在我想像这样在自定义视图的类中调用父视图控制器的实例方法
[self.parentViewController instanceMethod];
那可能吗 ?我怎样才能做到这一点 ?
“正常”方法应该是实现一个指向您的父视图控制器的属性(不保留)委托,但您可能更喜欢使用这样的东西:
-(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];
无论如何,我还建议您学习委托的工作原理,它在很多情况下都很有用,而且您迟早会需要它...
NSViewController 中没有 addSubview 方法。你可以在 NSView 中找到它。如果 bTVC 是 NSView 的一个实例(或其子类),您可以通过将 superview 发送给 self 来获得您所谓的父视图:[self superview] 或 self.superview。在您的示例中它将返回 bTVC。NSViewController 的工作方式不同,您可以在此处阅读完整文档