2012-10-30 30 views
5

Tôi đã triển khai UISearchDisplayController trong UITableViewController. Tìm kiếm đang hoạt động, nhưng UISearhDisplayController tạo ra một tableView mới với một ô tiêu chuẩn, và tableView của tôi đang sử dụng một ô tùy chỉnh. Một vấn đề khác là tôi sử dụng một segue:UISearchDisplayController và ô tùy chỉnh

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

và các ô trong searchResultsTableView không kích hoạt những segue ..

Làm sao để hiển thị các kết quả tìm kiếm có tế bào tùy chỉnh và Segue làm việc?

Đây là các mã:

... 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
if (tableView == self.searchDisplayController.searchResultsTableView){ 
return [nameFilteredObj count]; 
} else { 
return [sortedObj count]; 
}} 

- (CustomCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"customCell"; 

CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) { 
cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 
if (tableView == self.searchDisplayController.searchResultsTableView) 
{ 
cell.textLabel.text = [[sortedObj objectAtIndex:indexPath.row] valueForKey:@"Name"]; 
} else { 
cell.nameLabel.text = [[sortedObj objectAtIndex:indexPath.row] valueForKey:@"Name"]; 
cell.countryLabel.text = [[sortedObj objectAtIndex:indexPath.row] valueForKey:@"Country"]; 
cell.bottleImageView.image = [UIImage imageNamed:[[sortedObj objectAtIndex:indexPath.row] valueForKey:@"Image"]]; 
} 
return cell; 
} 

//The codes for filtering the results and update of searchResultsTableView (not necessary for this question I think): 

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope 
{ 
[nameFilteredObj removeAllObjects]; 

for(NSDictionary *obj in sortedObj) 
{ 
NSString *objName = [obj objectForKey:@"Name"]; 
NSRange range = [objName rangeOfString:searchText options:NSCaseInsensitiveSearch]; 
if (range.location != NSNotFound) { 
    [nameFilteredObj addObject:obj]; 
}}} 

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString 
{ 
[self filterContentForSearchText:searchString scope: 
[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]]; 
return YES;} 

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption 
{ 
[self filterContentForSearchText:[self.searchDisplayController.searchBar text] scope: 
[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption]]; 
return NO;} 
... 

Tôi đang sử dụng Storyboard như giao diện.

+1

Bạn đã đặt 'self.searchDislpayController.searchResultsDataSource' thành' self'? Và 'searchResultsDelegate'? – rmaddy

+0

Bạn có thể cho tôi xem không? – ingenspor

+1

'self.searchDisplayController.searchResultsDataSource = self'. Làm điều này, nơi bạn tạo bộ điều khiển tìm kiếm. – rmaddy

Trả lời

-8

Thực ra rất dễ thực hiện, nhưng tôi đã tìm thấy nhiều giải pháp làm việc phức tạp trên đường đi. Sử dụng phần dễ dàng này và SearchResultsTableView là GONE:

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString 
{ 
... 
self.searchDisplayController.searchResultsTableView.hidden=YES; 
return YES; 
} 
+2

Làm thế nào là giải pháp này? Tất cả những gì bạn đang làm là ẩn chế độ xem bảng sẽ hiển thị kết quả được lọc và hiển thị bảng xem chưa được lọc thay thế. – ShatyUT

+1

badass, man .... – saiday

Các vấn đề liên quan