2011-09-22 48 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方法中。這就是爲什麼它正確顯示爲空。我在按鈕操作方法中使用了我的類別方法,然後它工作正常。