2013-10-22 2 views
0

단위 테스트에서 UITextField에서 becomeFirstResponder 메서드를 호출하려고하는데, 즉 첫 번째 응답자가되지 않는 것을 얻고 있습니다.UITextField 첫 번째 응답자 만들기

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 일 수 있습니다. 이 경우 NO는 올바른 동작입니다. –

답변

-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 어떤 작업을 수행하는 첫 번째 응답자로 필요한 코드를 단위 테스트입니다. –

관련 문제