2009-09-01 1 views
1

나는 UISearchBar에 검색어를 쓰면 아래의 UITabelView 출력을 변경 (필터)하는 검색 기능이있는 iPhone 앱에서 작업하고 있습니다. 검색 창 내부 편집 할 때아이폰 검색 막대 취소 버튼 응용 프로그램을 무력화

사용자가 검색 창의 내용을 편집하고 모든 텍스트를 삭제됩니다

가, 다음 코드는 이제

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { 

    if([searchText isEqualToString:@""] || searchText==nil){ 

    [tableData removeAllObjects]; //clear array that holds data for table view 
    [tableData addObjectsFromArray:tumorNames]; //load array with database 
    [searchTableView reloadData]; 
    return; 
    } 
} 

(method continues...) 

에서 실행이 잘 작동 : 삭제 여부 백 스페이스/삭제가있는 모든 텍스트 또는 '지우기'버튼을 누르지 않아도됩니다. 검색 필드가 지워지고 검색 가능한 모든 항목이 테이블보기에 표시됩니다. '취소'버튼을 눌러도 마찬가지지만,이 경우에는 검색 창이 첫 번째 응답자를 종료합니다.

그러나 검색이 수행되고 하나 이상의 결과 항목이 테이블보기에 표시 될 때 (검색 표시 줄이 첫 번째 응답자의 사임을 받고 키보드가 사라진 경우) 지우기 단추를 눌러도 여전히 가능하지만 앱 다음과 같은 메시지가 충돌 :

'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)' 

문제가 테이블 뷰 데이터의 재로드 내에있는 것으로 나타나지만 배열의 인덱스 일 경우가 아니라에 문제가있을 수 왜 내가 알아낼 수 없습니다 다른 쪽.

왜 이런 일이 일어날 지 알고 있습니다. 모든 도움을 주셨습니다.

맑은 버튼을 클릭 그레고르, 스웨덴

답변

2

밝혀, 방법 후 을 호출되는

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 

위임 방법

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 

이 생소 할 수 있습니다 ,하지만 내 문제를 설명합니다 : 나는 이전의 테이블보기에 대한 데이터를 들고 배열을 내게로 날 thod (마지막 검색을 지우려면), 테이블보기에서 읽으려고 할 때 오류가 발생합니다.

문제가 해결되어이 정보가 다른 사람에게 도움이되기를 바랍니다.

취소 버튼을 클릭하면 검색 창을 첫 번째 응답자로 만들지 않아도됩니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까?

그레고르, 스웨덴

+0

[searchBar resignFirstResponder]; 속임수를 쓰자. – Souljacker

0

당신은 - (BOOL)acceptsFirstResponder을 무시하고 searchfield이 @""이 포함 된 경우 NO를 반환 노력하지만, 배열 != nil 수 있습니다. 그게 효과가 있다고 생각합니다.

1
(void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText { 
     ... 
     [searchBar becomeFirstResponder]; 
[self.tableView reloadData];