ios - 从 UIView 到 UIViewController?

有没有一种内置的方法可以从 UIView 到它的 UIViewController?我知道你可以通过 [self view]UIViewController 到它的 UIView 但我想知道是否有反向引用?

最佳答案

使用 Brock 发布的示例,我对其进行了修改,使其成为 UIView 的类别,而不是 UIViewController,并使其递归,以便任何 subview 都可以(希望)找到父 UIViewController。

@interface UIView (FindUIViewController)
- (UIViewController *) firstAvailableUIViewController;
@end

@implementation UIView (FindUIViewController)
- (UIViewController *) firstAvailableUIViewController {
    UIResponder *responder = [self nextResponder];
    while (responder != nil) {
        if ([responder isKindOfClass:[UIViewController class]]) {
            return (UIViewController *)responder;
        }
        responder = [responder nextResponder];
    }
    return nil;
}

@end

要使用此代码,请将其添加到一个新的类文件中(我将其命名为“UIKitCategories”)并删除类数据...将@interface 复制到标题中,并将@implementation 复制到.m 文件中。然后在您的项目中,#import "UIKitCategories.h"并在 UIView 代码中使用:

// from a UIView subclass... returns nil if UIViewController not available
UIViewController * myController = [self firstAvailableUIViewController];

https://stackoverflow.com/questions/1340434/

相关文章:

ios - UIImageView 上的 UIGestureRecognizer

objective-c - 项目构建中的 CocoaPods 错误

ios - 具有 UITapGestureRecognizer 的 View 中的 UIButton

objective-c - 是否可以刷新 UITableView 中的单个 UITableViewC

ios - Storyboard 中的 Modal 和 Push segue 有什么区别?

objective-c - 如何等待异步调度的 block 完成?

objective-c - Objective-C 中的方法语法

ios - 在 Objective-C 中检查空字符串的正确方法是什么?

ios - 在 UITableViewCell 中有一个 UITextField

objective-c - 为什么 Objective-C 委托(delegate)通常被赋予属性分