2011-08-13 3 views
6

앱 전체에 와인을 일반적으로 나열하는 앱이 있습니다 (전체 화면 또는 더 작은 UIView). 이 ViewController는 뷰를 할당하고 대리인/etc를 주 ViewController에 할당 한 다음 해당 델리게이트를 통해 데이터를 채 웁니다. 화면에 와인을 표시하고자하는 마스터보기에서 기존 tableView 및 ViewController를 UISearchDisplayController와 함께 사용

:

wineListViewController = [[WineListViewController alloc] initWithWines:nil]; 
wineListViewController.navigationController = self.navigationController; 
self.winesTableView.dataSource = wineListViewController; 
self.winesTableView.delegate = wineListViewController; 
// Table population code goes here 

좋아요하지만 지금은 검색 측면을 짓고 있어요, 나는 결과를 표시하기 위해이 같은의 ViewController를 사용하려면 왜냐하면 나는 cellForRowAtIndexPath와 같은 복잡한 규칙을 가지고 있기 때문이다.

그러나 UISearchDisplayController는 고유 한 tableView를 사용하기를 원하므로 동일한 방법으로 표시하려면 WineListViewroller (heightForRow, cellForRow)에서 모든 코드를 복제해야합니다. 코드를 복제하지 않도록 WineListViewController를 UISearchDisplayController에 연결할 수있는 방법이 있습니까?

답변

2

예.

당신은 당신의 WineListViewController의 인스턴스를 가리 키도록 UISearchDisplayControllersearchResultsDataSourcesearchResultsDelegate를 설정해야합니다 (당신은 WineListViewController에 적절한 장소에서이 작업을 수행 할 수 있으며, 단순히 '자기를 전달 UISearchDisplayController의 두 가지 속성은 데이터 소스대리인과 완전히 동일합니다. f a UITableView. UISearchDisplayController은 원래 UITableView를 통해 UITableView를 제공하고 이러한 속성을 사용하여 특정 검색 문자열에 대해 표시 할 결과를 지정할 수 있습니다 (원래 테이블과 마찬가지로). 검색 결과 테이블보기는 문자열이 변경 될 때마다 다시로드되어야하며 UITableView 데이터 소스 및 대리자 메서드가 호출됩니다. (예를 들어) 다음과 같이 표준 jQuery과와 WineListViewController 오 당신의 데이터 소스 및 위임 방법에 searchResultsTableView 구별 할 수

:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (tableView == self.tableView) 
    { 
     // Return a standard listing for indexPath. 
    } 
    else if (tableView == self.searchDisplayController.searchResultsTable) 
    { 
     // Return a filtered cell, based on a filtered model of the searchDisplayController's searchBar's search string. 
    } 
} 
Y는 UISearchDisplayController의 위임 방법을 살펴한다

등 검색 표시 결과 테이블을 새로 고쳐야하는시기 등을 지정하기 위해이를 구현할 수 있습니다.

+0

정말 대단한 답변입니다. 감사합니다. 실제로 유선 연결이되었지만 일단 데이터가 도착하면 tableView를 다시로드하라는 알림이 필요했습니다. 다음 사람이 이것을 읽으려면 위의 코드를 게시 한 후에 이것이 필요합니다 :'self.searchDisplayController.searchResultsDataSource = wineListController; self.searchDisplayController.searchResultsDelegate = wineListController;''SearchResultsDone'에서 다음을 가져야합니다 :'wineListController.currentWines = resultArray; [self.winesTableView reloadData];' – beeudoublez

관련 문제