实现UIView类别的问题

时间:2011-09-22 17:02:01

标签: iphone objective-c cocoa-touch uiview categories

无论出于何种原因,以下代码无效:

#import <Foundation/Foundation.h>

@interface UIView (FindUIViewControllerParent)

- (UIViewController *) firstAvailableUIViewController;
- (id) traverseResponderChainForUIViewController;

@end


#import "UIView+FindUIViewControllerParent.h"

@implementation UIView (FindUIViewControllerParent)

- (UIViewController *) firstAvailableUIViewController 
{
    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

parentViewController = [self firstAvailableUIViewController];

firstResponder以nil的形式返回,而不是父视图控制器(当我没有它的类别时,它完成得很好)。我已经阅读了一些其他线程,他们说要对项目设置中的其他链接选项进行一些调整,我已经尝试过这些并且它仍然不起作用。谁能看到我在这里做错了什么? (这个代码几乎完全从另一个获得大量投票的线程中复制)。

1 个答案:

答案 0 :(得分:1)

我发现了我的问题。在视图甚至连接到视图控制器之前,我一直在寻找并将initResponder存储在我的视图的init方法中。这就是它正确显示null的原因。我在按钮操作方法中使用了我的类别方法,然后它工作正常。