iOS - UIView是否属于UIViewController?

ary*_*axt 7 iphone objective-c uiview ios

我的ViewController中有一堆子视图.

在最后一层我有一个UIView,从这个视图我想调用superview,直到我找到属于我的ViewController的UIView.

是否有可能找出UIView是否属于ViewController?

UIView *someView = self.superView;

while (true)
{
   if (someView BELONGS TO VIEWCONTROLLER)
   {
      // Now we know this view belongs to a VIewController
      break;
   }

   someView = someView.superView;
}
Run Code Online (Sandbox Code Playgroud)

alb*_*amg 9

如果要查看某个视图是否在视图控制器管理的层次结构中,并且您有一个指向视图控制器的指针:

BOOL belongsToController = [aView isDescendantOfView:viewController.view];
Run Code Online (Sandbox Code Playgroud)

或者,如果要查看某个视图是否是视图控制器管理的层次结构的,但您没有指向视图控制器的指针,则可以遍历响应程序链.按照UIRespondernextResponder文档:

UIView通过返回UIViewController管理它的对象(如果有的话)或超级视图(如果没有)来实现此方法

因此,如果某个视图的下一个响应者是a UIViewController,则该视图必须是与视图控制器关联的视图.

if ([[aView nextResponder] isKindOfClass:[UIViewController class]]) {
    // aView is the root of the view hierarchy managed by the view controller
}
Run Code Online (Sandbox Code Playgroud)