在UISearchBar中搜索时,UITableView中的单元格保持清晰

时间:2014-03-13 19:26:56

标签: ios objective-c uitableview uisearchbar uisearchdisplaycontroller

我有一个包含两个部分UITableView的应用程序。现在我想添加UISearchBar以允许搜索。搜索真的很好,并选择正确的单元格。搜索时,您可以看到有可以选择的单元格,但标签为空白。这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"qrCodeCell";
    QRTableViewCell *cell = (QRTableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[QRTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    if (indexPath.section == 0) {
        NSDateFormatter *format = [[NSDateFormatter alloc] init];
        [format setDateFormat:@"MMM dd, yyyy HH:mm"];
        if (tableView == self.searchDisplayController.searchResultsTableView) {
            //NSLog(@"%@",[[self.searchResultsQR objectAtIndex:indexPath.row] valueForKey:@"data"]);
            [cell.dataLabel setText:[[self.searchResultsQR objectAtIndex:indexPath.row] valueForKey:@"data"]];
            //NSLog(@"%@",cell.dataLabel.text);

            NSDate *timeStamp = [[self.searchResultsQR objectAtIndex:indexPath.row] valueForKey:@"timeStamp"];
            [cell.timeLabel setText:[format stringFromDate:timeStamp]];
        } else {
            [cell.dataLabel setText:[[self.qrcodes objectAtIndex:indexPath.row] valueForKey:@"data"]];
            NSDate *timeStamp = [[self.qrcodes objectAtIndex:indexPath.row] valueForKey:@"timeStamp"];
            [cell.timeLabel setText:[format stringFromDate:timeStamp]];
        }
    } else if (indexPath.section == 1) {
        NSDateFormatter *format = [[NSDateFormatter alloc] init];
        [format setDateFormat:@"MMM dd, yyyy HH:mm"];
        if (tableView == self.searchDisplayController.searchResultsTableView) {
            [cell.dataLabel setText:[[self.searchResultsScanned objectAtIndex:indexPath.row] valueForKey:@"data"]];
            NSDate *timeStamp = [[self.searchResultsScanned objectAtIndex:indexPath.row] valueForKey:@"timeStamp"];
            [cell.timeLabel setText:[format stringFromDate:timeStamp]];
        } else {
            [cell.dataLabel setText:[[self.scannedCodes objectAtIndex:indexPath.row] valueForKey:@"data"]];
            NSDate *timeStamp = [[self.scannedCodes objectAtIndex:indexPath.row] valueForKey:@"timeStamp"];
            [cell.timeLabel setText:[format stringFromDate:timeStamp]];
        }
    }
    return cell;
}

这与问题几乎完全相同,但问题无法解决:UISearchBar with UITableView containing custom cells => blank cellsIt doesn't show the contents of the cells in a UITableView filtered by a UISearchDisplayController

如果有人可以帮助我,我真的很感激!

修改

以下是我TableViewController的更多代码:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"data contains[c] %@", searchText];
    self.searchResultsQR = [self.qrcodes filteredArrayUsingPredicate:resultPredicate];
    self.searchResultsScanned = [self.scannedCodes 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 :(得分:0)

您的手机未正确注册。这意味着您的代码将运行:

cell = [[QRTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

不会创建所有子视图或连接任何商店。

您需要找出您的手机未正确注册的原因。如果您在故事板中创建它,那么它应该包含在将要使用它的表视图中(它应该自动注册单元格)。如果您在独立的XIB文件中创建它,那么您需要加载NIB并在加载表视图时显式注册它。

您有2个表视图,单元格注册了一个而不是另一个 - 这是原型单元的工作方式。

您最好的选择:

- 删除原型单元,创建一个XIB并明确地向每个表视图注册NIB

- 不使用搜索控制器(因此您只有1个表视图,自己管理搜索栏)

These are a few references which you can look forward to.

This is a tutorial for implementing search delgates with storyboard

还找到了关于SO的讨论,这可能会给你一些方向,指出你出错的地方

Search Bar in UITableView doesn't display text in Cell label