我正在尝试为我的iOS 7应用实现搜索栏。
表格视图不会显示过滤器处于活动状态时的值,但过滤器是正确的。
所以,我得到了所有结果:
然后,我开始过滤没有有效结果的数据:
最后,我使用了一个有效的过滤器并且日志结果是正确的,但该表没有显示:
我不知道如何找到问题。我的代码:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
if (tableView == self.searchDisplayController.searchResultsTableView) {
return [self.searchResults count];
} else {
return [self.balancesData count];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"balancesCell";
BalancesTableViewCell *cell = (BalancesTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// Configure the cell...
if (cell == nil) {
cell = [[BalancesTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
Balances *balance = nil;
if (tableView == self.searchDisplayController.searchResultsTableView) {
balance = self.searchResults[indexPath.row];
} else {
balance = self.balancesData[indexPath.row];
}
cell.razonSocialLabel.text = balance.razonSocial;
cell.importeLabel.text = balance.importe;
tableView.backgroundColor = cell.backgroundColor = [UIColor colorWithRed: 0.937 green: 0.937 blue: 0.957 alpha: 1.0];
return cell;
}
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"razonSocial contains[c] %@", searchText];
self.searchResults = [self.balancesData filteredArrayUsingPredicate:resultPredicate];
}
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
[self filterContentForSearchText:searchString
scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
objectAtIndex: [self.searchDisplayController.searchBar
selectedScopeButtonIndex]]];
return YES;
}
答案 0 :(得分:6)
cell.razonSocialLabel.text = balance.razonSocial;
但是如果cell
不实际上是一个BalancesTableViewCell怎么办?然后cell.razonSocialLabel
为零,cell.razonSocialLabel.text
调用setText:
为零,没有任何反应。所以你正在获取细胞,但它们都显示为空白。
您需要从真实的表中获取您的单元格;这是在您出列单元格时将BalancesTableViewCell分发的表格。但是你要从tableView
获取你的单元格,在过滤表的情况下是搜索显示控制器的表视图,它对BalancesTableViewCell一无所知。
因此,正如Danh所说,你必须改变这一行:
BalancesTableViewCell *cell =
(BalancesTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
到此:
BalancesTableViewCell *cell =
(BalancesTableViewCell *)[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];