2012-10-30 19 views
5

मैंने UITearchViewController में UISearchDisplayController लागू किया है। खोज काम कर रही है, लेकिन UISearhDisplayController एक मानक तालिका के साथ एक नई तालिका दृश्य बनाता है, और मेरी तालिका दृश्य कस्टम सेल का उपयोग कर रहा है। ..UISearchDisplayController और कस्टम सेल

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

और searchResultsTableView में कोशिकाओं segue ट्रिगर नहीं कर रहे

कस्टम सेल के साथ खोज परिणामों को प्रदर्शित करने और काम करने के लिए segue: एक अन्य समस्या यह है कि मैं एक segue उपयोग क्यों करें?

... 

- (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;} 
... 

मैं इंटरफेस के रूप में स्टोरीबोर्ड उपयोग कर रहा हूँ:

इस कोड है।

+1

आप '' self' को self.searchDislpayController.searchResultsDataSource' सेट किया है? और 'searchResultsDelegate'? – rmaddy

+0

क्या यू कृपया मुझे दिखा सकता है? – ingenspor

+1

'self.searchDisplayController.searchResultsDataSource = self'। ऐसा करें जहां आप खोज नियंत्रक बनाते हैं। – rmaddy

उत्तर

-8

असल में करना बहुत आसान है, लेकिन मुझे रास्ते में कई जटिल अर्ध-कार्य समाधान मिलते हैं। यह आसान टुकड़ा का उपयोग करें और SearchResultsTableView चला गया है:

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

यह समाधान कैसे है? आप जो भी कर रहे हैं वह तालिका दृश्य को छुपा रहा है जो फ़िल्टर किए गए परिणाम दिखाएगा और इसके बजाय unfiltered tableview दिखाएगा। – ShatyUT

+1

बदस, आदमी .... – saiday

संबंधित मुद्दे