猿问

从UIView到UIViewController?

从UIView到UIViewController?

是否有一个内置的方法可以从UIView向其UIViewController?我知道你可以从UIViewController向其UIView通孔[self view]但我想知道是否有反向引用?



30秒到达战场
浏览 399回答 3
3回答

繁星淼淼

使用BRock发布的示例,我对其进行了修改,使其成为UIView的一个类别,而不是UIViewController,并使其具有递归性,以便任何子视图都能够(希望)找到父UIViewController。@interface UIView (FindUIViewController)- (UIViewController *) firstAvailableUIViewController;- (id) traverseResponderChainForUIViewController; @end@implementation UIView (FindUIViewController)- (UIViewController *) firstAvailableUIViewController {     // convenience function for casting and to "mask" the recursive function     return (UIViewController *)[self traverseResponderChainForUIViewController];}- (id) traverseResponderChainForUIViewController {     id nextResponder = [self nextResponder];     if ([nextResponder isKindOfClass:[UIViewController class]]) {         return nextResponder;     } else if ([nextResponder isKindOfClass:[UIView class]]) {         return [nextResponder traverseResponderChainForUIViewController];     } else {         return nil;     }}@end若要使用此代码,请将其添加到一个新的类文件中(我将其命名为“UIKitCollection”)并删除类数据.将@接口复制到头中,将@实现复制到.m文件中。然后在您的项目中,#导入“UIKitCluories.h”并在UIView代码中使用:// from a UIView subclass... returns nil if UIViewController not available UIViewController * myController = [self firstAvailableUIViewController];

隔江千里

UIView是UIResponder. UIResponder布置方法-nextResponder的实现返回nil. UIView重写此方法,如UIResponder(出于某种原因,而不是在UIView)如下所示:如果视图具有视图控制器,则由-nextResponder..如果没有视图控制器,该方法将返回SuperView。将这个添加到您的项目中,您就可以滚动了。@interface UIView (APIFix)- (UIViewController *)viewController;@end@implementation UIView (APIFix)- (UIViewController *)viewController {     if ([self.nextResponder isKindOfClass:UIViewController.class])         return (UIViewController *)self.nextResponder;     else         return nil;}@end现在UIView具有返回视图控制器的工作方法。
随时随地看视频慕课网APP

相关分类

iOS
我要回答