2011-12-08 24 views
5

我有一個實現UIKeyInput協議並且具有定製的UIView和becomeFirstResponder

- (BOOL) canBecomeFirstResponder{ 
    return YES; 
} 
在子類中所定義

一個自定義的UIView。當調用:

[customView becomeFirstResponder]; 
NSLog(@"is first? %i",[customView isFirstResponder]); 

單擊按鈕時,它返回false,即使canBecomeFirstResponder的設置正確,所有的UIKeyInput協議功能被實現。還有哪些東西可以阻止這種觀點成爲第一響應者?它生活在一個scrollView和另一個自定義視圖,如果有幫助。

更新:

我檢查,看看目前的第一反應是用:

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow]; 
UIView *firstResponder = [keyWindow performSelector:@selector(firstResponder)]; 

和令人驚訝的是firstRespondernil。所以似乎沒有什麼東西佔據了這些事件。

+0

現在是否有其他人拒絕放棄第一響應者?像文本字段或與自定義代理的東西? –

回答

7

你重寫becomeFirstResponder

子類可以覆蓋此方法來更新狀態或執行一些 操作,如突出顯示選擇。

跟進:

子類可以覆蓋此方法,以更新狀態或 執行某些動作,如挑染的選擇。

響應者對象僅變爲如果當前 應答可以辭職第一響應狀態(canResignFirstResponder) 和新的應答器可以成爲第一個響應所述第一響應。

你可以調用這個方法來創建響應者對象,比如查看第一響應者 。但是,如果它是 是視圖層次結構的一部分,則應該只在該視圖上調用它。如果視圖的窗口屬性包含一個 UIWindow對象,則它已安裝在視圖層次結構中;如果它 返回nil,則該視圖將從任何層次結構中分離出來。

您是否確認您符合上述所有條件?

+0

不,但這很酷,你可以。 – Ralphleon

+0

我只是把它分類玩了一下,確實超級回來了NO :( – Ralphleon

+0

想到也許是這樣的吧 – Steve