문제의 간단한 설명 : 바인드 된 검색 디스플레이 컨트롤러를 자동으로 트리거하지 않고 검색 창 텍스트를 설정하려고합니다.searchbar : 검색 창 텍스트 변경
문제의 설명 : 검색 막대와 검색 디스플레이 컨트롤러가있는 iphone 응용 프로그램이 있습니다. searchdisplaycontroller는 자동 완성에 사용됩니다. 자동 완성을 위해 나는 sqlite 데이터베이스를 사용한다. 사용자는 키워드의 처음 몇 글자를 입력하고 결과는 searchdisplaycontroller의 테이블에 표시됩니다. 입력 된 모든 문자에 대해 SQL select 쿼리가 실행됩니다. 이 부분은 정상적으로 작동하며, 글자가 입력되고 결과가 표시됩니다.
문제는 다음과 같습니다. 사용자가 표에서 행을 선택하면 검색 창 텍스트를 자동 완성 결과 테이블에서 선택한 텍스트로 변경하려고합니다. 또한 검색 디스플레이 컨트롤러를 숨기려고합니다. 이것은 작동하지 않습니다. 검색 디스플레이 컨트롤러가 사라진 후 검색 막대의 텍스트 상자가 비어 있습니다. 나는 무엇이 잘못되었는지 전혀 모른다. 나는 텍스트 상자의 텍스트를 변경하는 것만 큼 간단하지 않을 것이라고 생각했다.
두 가지 방법으로 텍스트를 변경하려고했습니다 : didSelectRowAtIndexPath 메소드 (검색 디스플레이 컨트롤러의 검색 결과 테이블)에서 처음이지만 그게 도움이되지 않았습니다. 검색 디스플레이 컨트롤러가 활성화되어 있지만 텍스트가 비어있는 동안 텍스트가 나타납니다.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"didSelectRowAtIndexPath");
if (allKeywords.count > 0)
{
didSelectKeyword = TRUE;
self.selectedKeyword = (NSString *)[allKeywords objectAtIndex: indexPath.row];
NSLog(@"keyword didselectrow at idxp: %@", self.selectedKeyword);
shouldReloadResults = FALSE;
[[self.mainViewController keywordSearchBar] setText: selectedKeyword];
//shouldReloadResults = TRUE;
[[mainViewController searchDisplayController] setActive:NO animated: YES];
}
}
또한 searchDisplayControllerDidEndSearch 메서드에서 변경하려고했지만 그 중 하나도 도움이되지 않았습니다. 텍스트 상자는 다시 ... 비어있었습니다.
편집 : 실제로는 텍스트가 비어 있지 않았지만 애니메이션이 사라진 후에 자동 완성 테이블의 결과가 그대로 남아 있습니다. 그래서 점점 더 악화됩니다.
- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller
{
NSLog(@"searchDisplayControllerDidEndSearch");
if (didSelectKeyword)
{
shouldReloadResults = FALSE;
NSLog(@"keyword sdc didendsearch: %@", selectedKeyword);
[[mainViewController keywordSearchBar] setText: selectedKeyword]; //
이 메서드에서는 sqlite에서 데이터를 선택하는 다른 메서드를 호출합니다. 이 부분이 효과적입니다.
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
NSLog(@"shouldReloadResults : %i", shouldReloadResults);
if (shouldReloadResults)
{
NSLog(@"shouldReloadTableForSearchString: %@", searchString);
[self GetKeywords: searchString : @"GB"];
NSLog(@"shouldReloadTableForSearchString vege");
return YES;
}
return NO;
}
내 문제가 무엇인지 분명하지 않은지 문의하십시오. 도움이 필요해. 고마워요
FYI :'searchDisplayController'는 iOS 8에서 사용되지 않습니다. 'UISearchController'를보세요. – Besi