2016-11-03 2 views
0

저는 searchController가 있으며 searchResultsController가 있습니다. 검색 막대에서 검색 할 때 결과 컨트롤러에 검색 결과가 표시되지만 셀 중 하나를 누르면 세부보기 컨트롤러가 표시되지 않습니다. 표시하려면 검색 막대 옆에있는 취소 버튼을 누르고 searchResultsController가 사라지면 상세보기가 나타납니다. 자식 뷰에서 상위 뷰에 segue 수행 수행 함수가 호출되고 있음을 알고 있습니다. searchResultsController의 tableview 대리자는 모두 searchController를 가리 킵니다.하위 뷰 부모 뷰에서 performSegueWithIdentifier를 호출해도 뷰가 변경되지 않습니다.

취소 버튼을 누르기 전까지보기가 변경되지 않는 이유는 무엇입니까?

검색 컨트롤러 클래스 :

// parent view controller 
- (void) showContact:(Contact*)contact 
{ 
    NSLog(@"Did tap contact id:[%@]",contact.id); 
    [self performSegueWithIdentifier:@"contactPressed" sender:contact]; 
} 

- (void)contactsSearchTableDelegate:(ContactsSearchTableDelegate *)delegate 
        didTapContact:(Contact *)contact 
{ 
    [self showContact:contact]; 
} 

위임 클래스 :

// delegate, searchController and searchResultsController both point here 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self.delegate contactsSearchTableDelegate:self didTapContact:[self contactAtIndexPath:indexPath]]; 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

답변

1

검색 결과 컨트롤러가 뷰 컨트롤러를 발표입니다

다음은 코드의 일부입니다. 뷰는 화면을 덮고 우리가 시작한 뷰 컨트롤러의 뷰를 대체합니다. 따라서 뷰 컨트롤러의 뷰는 뷰 계층 구조에 없으므로 어디에서나 이동할 수 없습니다. 따라서 코드는 현재 수동으로하고있는 작업을 수행해야합니다. 검색을 취소하고 제공된 View Controller를 닫아야하므로 첫 번째 View Controller로 돌아가서 계속 진행할 수 있습니다.

+1

그러나이 경우 자세히보기에서 다시 돌아가서 검색으로 돌아 가지 않으면 전체 목록으로 돌아갑니다. 해당 기능을 어떻게 보존합니까? 특히 입력 한 텍스트와 검색 결과가 무엇이든간에 검색으로 다시 돌아갑니다. – Minimi

+0

나는 당신이 가지고 있어야만하는 것과 같은 건축물을 상상해 본 적이 없다고 생각합니다. 보통 검색 막대가있는 메인보기 컨트롤러가 있으며 사용자가 검색하면 검색 컨트롤러는 검색 결과 컨트롤러와 함께보기를 제공합니다. 따라서 일반 테이블과 검색 결과를 보여주는 필터링 된 테이블의 두 가지보기 만 있습니다. 기사에 세 번째 뷰 컨트롤러가 있습니까? 나는 그것을 상상할 수 없다. 당신이하고있는 일을 더 자세히 묘사 할 수 있습니까? – matt

+0

아니요 세 번째보기 컨트롤러가 없습니다. 네가 한 말 그대로. 그러나 사용자가 검색 결과에서 셀 중 하나를 탭하면 새로운보기가 해당 셀의 세부 정보 (즉, 연락처 정보)로 팝업됩니다. 그러나 이것은 발생하지 않습니다.보기가 검색 창 옆의 취소 버튼을 누르면 팝업됩니다. – Minimi