0

문제의 간단한 설명 : 바인드 된 검색 디스플레이 컨트롤러를 자동으로 트리거하지 않고 검색 창 텍스트를 설정하려고합니다.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; 
} 
 

내 문제가 무엇인지 분명하지 않은지 문의하십시오. 도움이 필요해. 고마워요

답변

1

하지 않았다 당신이 시도 다른 : mainViewController.searchDisplayController.searchBar.text=selectedKeyword;

검색 컨트롤러에서 검색 창 필드에 액세스하고 텍스트 내용을 업데이트합니다.

+0

FYI :'searchDisplayController'는 iOS 8에서 사용되지 않습니다. 'UISearchController'를보세요. – Besi

0

지금 무슨 일이 일어 났는지는 잘 모르겠습니다. 텍스트를 변경 한 후 검색 디스플레이 컨트롤러를 비활성화하려고했습니다. 어쨌든 도움을 주셔서 감사합니다. 나는 또한하지 검색 디스플레이 컨트롤러에 속하는 하나를 원래의 텍스트 필드를 변경하려고 생각하고 (내가 관찰까지 메모리에 다른 adresses) 그들은

 

- (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; 

     [[mainViewController searchController] setActive:NO animated: YES]; 

     [mainViewController.searchController.searchBar setText: self.selectedKeyword]; 

    } 
}