获取UIview的viewcontroller
2014-03-22 16:46
387 查看
我们知道,对于一个视图控制器类UIViewController,可以通过[self view]来获取到它所管理的视图UIView,反过来,对于一个视图类UIView,我们怎么获取到它的UIViewController?
UIView继承自UIResponder,UIResponder有一个实例方法- (UIResponder *)nextResponder,该方法返回响应链(responder chain)上的下一个对象。
有关- (UIResponder *)nextResponder方法,更具体的说明可参考UIResponder Class Reference,主要有几个重点:
1)UIResponder类不会自动存储和设置它的下一个响应者(the next responder),默认情况下nextResponder方法放回nil;
2)UIResponder的子类必须重载nextResponder方法,设置下一个响应者。比如UIView类,当管理它的UIViewController对象存在时,返回该UIViewController,否则返回它的父视图(superview);UIViewController类返回它所管理的视图的父视图;UIWindow类返回应用对象(the application object);UIApplication类返回nil。
通过以上的分析,对于一个视图类UIView,我们可以利用- (UIResponder *)nextResponder方法遍历响应链,获取到它的UIViewController,具体代码:
UIView继承自UIResponder,UIResponder有一个实例方法- (UIResponder *)nextResponder,该方法返回响应链(responder chain)上的下一个对象。
有关- (UIResponder *)nextResponder方法,更具体的说明可参考UIResponder Class Reference,主要有几个重点:
1)UIResponder类不会自动存储和设置它的下一个响应者(the next responder),默认情况下nextResponder方法放回nil;
2)UIResponder的子类必须重载nextResponder方法,设置下一个响应者。比如UIView类,当管理它的UIViewController对象存在时,返回该UIViewController,否则返回它的父视图(superview);UIViewController类返回它所管理的视图的父视图;UIWindow类返回应用对象(the application object);UIApplication类返回nil。
通过以上的分析,对于一个视图类UIView,我们可以利用- (UIResponder *)nextResponder方法遍历响应链,获取到它的UIViewController,具体代码:
@implementation UIView (FindUIViewController) - (UIViewController *)viewController { /// Finds the view's view controller. // Traverse responder chain. Return first found view controller, which will be the view's view controller. UIResponder *responder = self; while ((responder = [responder nextResponder])) if ([responder isKindOfClass: [UIViewController class]]) return (UIViewController *)responder; // If the view controller isn't found, return nil. return nil; } @end
相关文章推荐
- iOS 获取view的controller UIView+UIViewController
- 获取uiview的uiviewcontroller和rootviewcontroller
- IOS 如何从ViewController获取一个UIView上的某种或者某个控件
- MVC View中获取action、controller、area名称
- Xib与Storyboard加载UIViewController View尺寸大小不同的问题
- ios监听程序回到前台,viewController获取事件
- UIViewController Class 参考1(Creating a View Controller Using Nib Files,Handling Memory Warnings)
- 利用 (visibleViewController和topViewController ) 获取当前显示的页面
- MVC View中获取action、controller、area名称
- 获取iOS应用中当前处于Activity状态的ViewController
- IOS MPMoviePlayerViewController 获取当前音频文件播放时间点
- Spring MVC 学习笔记3 - 利用Default Annotation 模式获取请求,使Controller与View对应,并传值。
- UIViewController的 dismissViewControllerAnimated:completion:方法
- 使用XIB自定义一个UIView,然后将这个view添加到controller的view 上(相当于所有界面都通过xib来实现)
- 如何让你的UINavigationController.rootViewController 占领这个屏幕?UINavigationController UIView fullScreen
- IOS第12天(1,UIViewController控制器的创建的 三种方式,和第一个view创建)
- MVC View中获取action、controller、area名称
- IOS view在UIViewController中的生…
- iOS 获取当前最上层ViewController
- iOS 5.0 后UIViewController新增:willMoveToParentViewController和didMoveToParentViewCon