2013-10-22 25 views
0

在單元測試中,我試圖在UITextField上調用becomeFirstResponder方法,但是我得到NO,即它不成爲第一響應者。Make UITextField first responder

代碼看起來如下:

UITextField *textField = [self.controller.searchBar valueForKey: @"_searchField"]; 
// textField = [[UITextField alloc] initWithFrame:CGRectMake(10.0, 10.0, 400.0, 44.0)]; 
[self.navigationController.navigationBar addSubview:textField]; 

textField.enabled = YES; 
STAssertTrue([textField becomeFirstResponder], 
      @"TextField should be a first responder."); 

我在這裏失去了一些東西?

+0

根據對象生命週期的時刻,你正在調用這個調用,'self.navigationCopntroller.navigationBar'可能== nil。如果是這樣,否則是正確的行爲。 –

回答

-1

你抓住的文本框的搜索欄的值:

UITextField *textField = [self.controller.searchBar valueForKey: @"_searchField"]; 

但隨後你就忽略這個值,以及與此覆蓋它:你還沒有添加

textField = [[UITextField alloc] initWithFrame:CGRectMake(10.0, 10.0, 400.0, 44.0)]; 

這個新的textField到任何視圖,它只是一個單獨的文本域被分配,沒有更多。它不能成爲第一響應者,因爲它不是應用程序的一部分。

有更好的方式訪問搜索欄。

您可以使用searchTextPositionAdjustment和searchFieldBackgroundPositionAdjustment等調用來更改搜索項目的位置。您可以使用UISearchBarDelegate來獲取有關輸入文字的信息。

僅僅因爲您參考了它,它會如何成爲第一響應者?也許你打算使用isFirstResponder(它已經是第一響應者)或canBecomeFirstResponder(它可以成爲第一響應者)。

否則,您需要在UITextFieldTextDidBeginEditingNotification上設置NSNotification,以便在開始編輯時得到通知。

+0

我修改了上面的代碼。我試圖將textField作爲子視圖添加到導航欄中。但它仍然不是第一響應者。我爲我的代碼使用了搜索欄委託方法,但是我有一個代碼處理使用UITextField的搜索欄上的光標定位。我是單元測試的代碼,我需要UITextField作爲第一響應者來執行一些操作。 –

相關問題