在搜索表视图中设置单元格子标题

时间:2011-07-04 13:32:14

标签: iphone loops uitableview

我正在遍历数据,但是在这个数据中,它有两个完全相同的名称但两个都有不同的子主题(假设是副标题)。所以搜索结果显示两个名字都有相同的副标题,因为它们都有不同的字幕,因为它们有不同的副主题。

我认为以下代码可以正常工作,但事实并非如此,我不确定我做错了什么。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *kCellID = @"cellID";
static NSString *cellIdentifier = @"myCellIdentifier";

// if search is active display cell with subtitles otherwise display default
if (tableView == self.searchDisplayController.searchResultsTableView) {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier] autorelease];
        cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
        cell.textLabel.numberOfLines = 0;
    }
    cell.textLabel.text = [self.searchFilteredListContent objectAtIndex:indexPath.row];

    for(id obj in data){
        if ([[obj valueForKey:@"name"] isEqualToString:[self.searchFilteredListContent objectAtIndex:indexPath.row]]) {
            NSLog(@"%@",[obj valueForKey:@"subTopic"]);
            cell.detailTextLabel.text = [obj valueForKey:@"subTopic"];
        }
    }

    return cell;

}else{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellID];
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellID] autorelease];
    }
    cell.textLabel.text = [self.topics objectAtIndex:indexPath.row];
    return cell;
}

}

NSLog(@"%@",[obj valueForKey:@"subTopic"])显示正确的子主题,但不会在搜索表视图的字幕中显示这些结果。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

确保您使用适当的UITableViewCellStyle(除了UITableViewCellStyleDefault之外的任何内容都应该有效)。初始化时指定了单元格的样式。

        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];

答案 1 :(得分:1)

对2种不同类型的单元格使用相同的单元格标识符,这可能会在出列时出现问题,您应该使用2个不同的单元格标识符。

另外,你应该打破你的循环:

    for(id obj in data){
    if ([[obj valueForKey:@"name"] isEqualToString:[self.searchFilteredListContent objectAtIndex:indexPath.row]]) {
        NSLog(@"%@",[obj valueForKey:@"subTopic"]);
        cell.detailTextLabel.text = [obj valueForKey:@"subTopic"];
        break;
    }
}