2014-05-08 2 views
2

MKMapView를 사용하여 사용자 정의 UIViewController에서 UISearchDisplayController를 사용하려고합니다.UISearchDisplayController가 iPad에서 결과 테이블 뷰를 표시하지 않습니다.

탐색 표시 줄에 UISearchBar를 표시합니다.

아이폰에 있지만 아이 패드의 모든 작품

는, 결과에 대한의 TableView가 ... 심지어 팝 오버에 ... 난 그냥이의 tableview를 표시하려면, 표시되지 않습니다

(모든 대의원이 잘 초기화)

I 설정 모든 인터페이스 니어의 :

디버깅, 나는

self.searchDisplayController.searchResultsTableView; 

편집합니다 (searchDisplayController에 주소가있는)에있는 TableView가 존재 알고 ilder. 탐색 바에 searchBar를 삽입하는 것을 제외하고는. 난 그냥 프로그래밍을했다 : 아이폰에서있는 tableView가 아닌 ​​아이 패드에 표시되는 이유

self.searchDisplayController.displaysSearchBarInNavigationBar = YES; 

내가 이해가 안가!

EDIT 2 : I가 탐색 줄 (위에 인용 코드의 마지막 라인)에 삽입 제거하면

상기있는 tableView가 있지만, 전체 화면 대신 팝 오버들에 도시된다.

최종 편집 : 솔루션없이

, 나는 그것을 시도 다르게 : 나는 마스터 뷰의 연구와 detailView의지도보기와 더불어, SplitView에 내 시야를 내장. 그것은 작동하지만,이

.. 다르게 예상보다 외모와 대답은 : 신속한 및 iOS 8

을, 내 응용 프로그램을 다시 내가 아니라이 일을 할 수있는 솔루션을 발견했다.

if let tableView = self.searchDisplayController?.searchResultsTableView { 
     tableView.frame = CGRect(x: 0.0, y: 0.0, width: self.view.bounds.width, height: self.view.bounds.height) 
     self.view.addSubview(self.blurEffectView!) 
    } 
+2

어떻게이 모든 설정했다? 코드 또는 IB를 통해? – rmaddy

답변

1

동일한 문제가 있습니다. - 사용자가 검색 창에 검색어를 입력하기 시작하면, 키보드를 기각됩니다 (대한 http://www.objc.io/issue-5/iOS7-hidden-gems-and-workarounds.html

불행하게도,이 여전히 약간의 문제 : 부분적인 해결책은 여기에이 솔루션을 찾을 수

- (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView 
{ 
    if (OSVersionIsAtLeastiOS7() && IPAD) { // These are custom methods I have in my .pch file 
     self.view = controller.searchResultsTableView; 
     controller.searchResultsTableView.contentInset = UIEdgeInsetsZero; 
    } 
} 

구현하는 것입니다 나) 첫 번째 문자를 입력 한 후.

+0

이 답변을 주셔서 감사합니다. iOS 8에서는 다른 방법으로 새로운 UISearchController를 사용할 것입니다 :) – zarghol

2

@ 제레미 당신의 대답에 감사드립니다. 나는 IOS에 익숙하지 않아 당신의 대답이이 문제를 해결할 수 있도록 도와주었습니다. 다음은 다른 사람들에게 도움이되는 업데이트입니다.

가 문제를 해결하는 것입니다

originalView = self.view; 

가 searchDisplayController에 대해 다음 두 대리자 메서드를 추가 UR 원래보기의 사본을 잡고있는 viewDidLoad에서이 코드 조각을 포함합니다.당신의 내비게이션 바의 검색 창을 배치 경우 검색 텍스트가 하늘의 경우, 다른

UIEdgeInsetsMake(70, 0, 0, 0) 

언제든지 내가 사용이 대리자 메서드에 다음 self.view = originalView; 을 사용하여 원본보기를 표시하려면 UIEdgeInsetsZero

- (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView 
    { 
     if (OSVersionIsAtLeastiOS7() && (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)) { 
      if (([originalView isEqual:self.view])) { 
       self.view = controller.searchResultsTableView; 
       controller.searchResultsTableView.contentInset = UIEdgeInsetsMake(70, 0, 0, 0); 
       [self.searchDisplayController.searchBar becomeFirstResponder]; // This will retain the keyboard after keypress 
      } 
     } 
    } 

을 사용하여 사용 그런 다음 검은 색 화면 대신 원본보기를 표시합니다.

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{ 
    if ([searchString isEqualToString:@""]) { 
     if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
     { 
      self.view = originalView; 
     } 
    } 
    else{ 
    [self filterContentForSearch:searchString scope:[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]]; 
    } 
    return YES; 
} 

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{ 
    originalView.alpha = 0.5f; 
} 

-(void)searchBarTextDidEndEditing:(UISearchBar *)searchBar{ 
    originalView.alpha = 1.0f; 
} 
-1

이 문제가 해결되었습니다.

UISearchBar *searchBar = [UISearchBar new]; 
searchBar.delegate = self; 
[searchBar sizeToFit]; 

self.navigationItem.titleView = searchBar; 

그리고 YES로 displaysSearchBarInNavigationBar하지 않는