2010-08-01 1 views
1

내 컨트롤러의 xib에 UISearchDisplayController를 통합했습니다. 내가해야 할 기본 기능은 검색 표시 줄을 테이블의 머리글에두고 검색 표시 줄에 탐색 버튼을 표시하는 것입니다.취소를 터치하면 UITableview에서 UISearchbar를 헤더로 숨기기

내가 붙어있는 것 : 취소 할 때 검색 표시 줄을 보이지 않게합니다 (인덱스 0이 검색 창이 아니라 맨 위에 표시되도록 테이블을 유지함). 이유를 모르겠습니다 (세 번째 이미지 참조). 취소 버튼을 눌렀을 때 검색 창을 항상 숨겨야하는 방법 (그림 1 참조)

내가 무엇을 시도했다 :

  1. 가 처음 작동 (44)에있는 tableview의 contentOffset 설정.
  2. [tableview scrollToRowAtIndexPath : ....]을 호출합니다. 아무 것도하지 않는 것 같습니다.

답변

2

이 시도 :

- (void)viewWillAppeared:(BOOL)animated 
{ 
     [self hidesSeachBar]; 
     [super viewWillAppeared:animated]; 
} 

- (void)hidesSearchBar 
{ 
     CGSize searchSize = self.searchDisplayController.searchBar.bounds.size; 
     //not complete 
     [self.tableView setContentOffset:CGPointMake(0, searchSize.height)]; 
} 

- (void) searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller 
{ 
    //Your code 

    [self.tableView reloadData]; 
    [self hidesSearchBar]; 
} 
+0

이 나를 위해 잘 작동 : – Giovanni

0

당신이 비활성를 설정해 주어야 UISearchDisplayController의 검색 창을 숨 깁니다. 이것은 당신의 경우 탐색 줄뿐만 아니라

을 재표 것입니다, 당신은 당신이 다음 UISearchBarDelegate 프로토콜을 채택하는지 확인해야합니다 :

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar 
{ 
    [self.searchDisplayController setActive:NO animated:YES]; 
} 
+0

이것은 검색 창을 비활성화, 즉 취소 버튼을 누르는 것과 같습니다. 그리고 문제는 tableview 헤더에 숨기는 방법이었습니다. –

1

을 숨길 수있는 방법을 상쇄 내용입니다 설정을, 당신은 필요 수색이 끝나면 그렇게해라. 나는이 같은 것을 사용하고 있습니다 :

- (void) searchDisplayControllerWillEndSearch:(UISearchDisplayController*)controller 
{ 
    [self hideSearchBar]; 
} 


- (void) hideSearchBar 
{ 
    self.table.contentOffset = CGPointMake(0, self.searchBar.frame.size.height); 
} 
2

것은 당신이 그

@property(nonatomic, retain)UISearchBar *searchBar;

같은 속성으로 검색 막대를 선언 한 경우

tableView.tableheader = nil;

을 설정할 수 있습니다 다시 설정하십시오.

tableView.tableHeader = searchBar;

다시 필요할 때.

(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar 
{ 
    if(searchTask)[searchTask cancel]; 

    [self.searchResults removeAllObjects]; 
    [self.searchDisplayController.searchResultsTableView reloadData]; 

    //reload you table here 
} 

감사

0

당신은 UISearchBarDelegate 메서드를 호출 할 필요 취소에 검색 창을 숨 깁니다. 내 유일한 제안은 명료 함을 위해 메소드 인 "hideSearchBar"("hidesSearchBar"대신)에 이름을 지정하는 것입니다. 명령이기 때문에 부울 값을 쿼리하지 않기 때문입니다.