搜索栏工作正常但表格没有显示结果

时间:2014-03-26 00:39:31

标签: ios iphone uitableview searchbar

我正在尝试为我的iOS 7应用实现搜索栏。

表格视图不会显示过滤器处于活动状态时的值,但过滤器是正确的。

所以,我得到了所有结果: enter image description here

然后,我开始过滤没有有效结果的数据:

enter image description here

最后,我使用了一个有效的过滤器并且日志结果是正确的,但该表没有显示: enter image description here

我不知道如何找到问题。我的代码:

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

1 个答案:

答案 0 :(得分:6)

@Danh在评论中给出了正确的答案。这里的问题是你在说:

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];