2011-09-22 49 views
1

无论出于何种原因,下面的代码是不工作:问题实施的UIView类别

#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是回来为无,而不是被父视图控制器(当我这样做是没有它的类别工作很好)。我已经阅读了一些其他线程说,以在项目设置中对其他链接选项进行一些调整,并且我已经尝试了这些,但仍然无法正常工作。任何人都可以看到我在这里做错了吗? (这段代码几乎完全从另一个得到大量投票的线程中复制)。

+0

在类内抛出一个#error,这样你就可以检查这个类是否被编译。 – Can

+0

可以 - 正在编译,因为当我正在调试时,代码的那部分被激活。问题是,它为自己的nextResponder返回的响应者是零,当它不应该。 –

回答

1

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