我有一个UIViewcontroller
,我在其上添加了一个UIView
作为子视图,然后UIView
在第一个视图上添加了另一个作为另一个子视图。
现在我想UIViewController
从 last中调用一个方法UIView
。所有这些视图都是自定义视图,并已创建为不同的类。
从孩子的孩子那里调用这个最高视图的最佳方式是什么?
您不能将视图添加为 UIViewController 的子视图。我相信您将其添加为控制器视图的子视图。我不明白你在这个问题中要问什么。如果我错了,请纠正我。我假设您想在某些用户交互上调用 UIViewController 中的方法。如果这个视图(孩子的孩子)是一个按钮,你可以简单地这样做:
[button addTarget:nil action:@selector(methodToCall:) forControlEvents:UIControlEventTouchUpInside];
一个 nil 目标将导致 UIViewController 中的方法 methodToCall 被调用。如果您在那里没有看到调用,请确保视图层次结构(其中的所有前驱视图)已启用用户交互。
更好的方法(如果您没有子类化 UIButton)是为您的自定义视图创建一个协议,指定一个点击手势识别器,指定一个委托并在收到点击时在委托中发送调用方法。
视图控制器的全部意义在于它可以控制视图。您不应该向视图添加知识,这需要它知道将信息传递给控制器。视图应该有UIControl
s 并且控制器设置适当的目标和动作,或者控制器应该向视图添加手势,并再次指定适当的目标和动作。
我无法得到你想要的东西。如果你想要简单的最顶层视图,那么当你调用 addsubview 时设置这个视图的标签。每次添加子视图时增加标签,删除子视图时减少标签。然后你很容易得到最顶层视图当前标签的帮助。
这样做,
在TopView.h
@property (nonatomic, assign) YourViewController *ViewController_object;
在TopView.h
-(void)dealloc {
[super dealloc];
ViewController_object=nil;
}
-(void)your_method {
[ViewController_object method_from_VC];
}
希望它会帮助你...