2014-01-20 1 views
1

CoreData DB로 채워진 iOS 7 UITableView가 있습니다. 잘 작동합니다. 데이터베이스를 검색하는 UISearchDisplayController를 추가했습니다. 이 검색은 검색 결과가 화면에 표시 될 수있는 것보다 적은 작은 경우를 제외하고는 잘 작동합니다. 이 경우 결과가 아래로 스크롤되지 않는 여분의 빈 셀을 보게됩니다. 다음은 예입니다 :추가 셀이 UISearchDisplayController의 결과 뒤에 표시됩니다.

UISearch Weirdness

비 스크롤 선 사이의 디바이더의 폭은 나의 테이블 뷰에 대한 storybord 옵션의 '구분 인 세트'의 정의 폭에 의해 제어 될 것 같다, 그래서 나는 알고있다 그 사람들이 어디 출신인지 알기 위해, 나는 그 사람들이 나타나지 못하도록 막을 수 있습니다. 스토리 보드에서 Table View의 컨텐츠는 프로토 타입 셀 1 개만 있으면 'Dynamic Prototypes'로 설정됩니다. 또한 스토리 보드의 내 테이블보기에 범위가있는 검색 창을 연결했습니다.

다음은 검색 상호 작용을 관리하는 데 사용하는 코드입니다.

#pragma mark - Search 
// This gets called when you start typing text into the search bar 
-(BOOL)searchDisplayController:(UISearchDisplayController *)_controller shouldReloadTableForSearchString:(NSString *)searchString { 
    self.searchString = searchString; 
    self.fetchedResultsController = nil; 

    [self setFetchedResultsControllerWithContext:self.managedObjectContext andPredicate:[self searchPredicateGenerator]]; 

    return YES; 
} 

// This gets called when you change the search bar scope 
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption { 
    self.searchBar.selectedScopeButtonIndex = searchOption; 
    self.fetchedResultsController = nil; 

    [self setSearchBarPlaceholdersForCase:searchOption]; 

    [self setFetchedResultsControllerWithContext:self.managedObjectContext andPredicate:[self searchPredicateGenerator]]; 

    return YES; 
} 

// To generate search predicates 
-(NSPredicate *)searchPredicateGenerator { 
    return [NSPredicate predicateWithFormat:[NSString stringWithFormat: @"%@ AND ((title CONTAINS[cd] \"%@\") OR (descriptionText CONTAINS[cd] \"%@\"))", 
              [self stringPredicateForCase:self.searchBar.selectedScopeButtonIndex], 
              self.searchString, 
              self.searchString ]]; 
} 

// This gets called when you cancel or close the search bar 
- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller{ 
    self.searchString = nil; 
    self.fetchedResultsController = nil; 

    [self setFetchedResultsControllerWithContext:self.managedObjectContext andPredicate:self.filterPredicate]; 
} 

// to tell the search controller which cells to use here 
- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView { 
    [tableView registerClass:[TWLTableCell class] forCellReuseIdentifier:@"MarkIdentifier"]; 
    tableView.rowHeight = TWLTABLE_ROW_HEIGHT; // or some other height 
} 

나는 짧은 질문을 유지하기 위해 여기에 붙여 넣기 전체 파일을 피할 수 있지만, 다른 코드 조각 (또는 기타 정보)를 필요로하는 경우 알려 주시기 바랍니다했습니다. 감사.

+0

흠, 약 2 주 후에 아무 반응. 이 문제를 추적하는 데 도움이되는 정보 등을 더 제공해 주시면 알려주세요. – Nick

답변

1

이 시도

스토리 보드 -> 테이블보기 -> 속성을 ​​속성 -> 스타일 -> 그룹화

+0

이 방법은 효과가 있지만 그 이유는 모르겠습니다. 그것은 모든 셀의 높이를 엉망으로 만들었지 만 (높이가 반으로 만들어 짐) 스토리 보드 파일을 앞뒤로 비교하여 적절한 픽셀 높이를 이전과 동일하게 수정할 수있었습니다. 감사! – Nick

+0

이것은 iPhone 설정 페이지에서 사용되는 표준 방법입니다. 적어도 그것은 좋아 보인다 :) – Esqarrouth

관련 문제