我正在遍历数据,但是在这个数据中,它有两个完全相同的名称但两个都有不同的子主题(假设是副标题)。所以搜索结果显示两个名字都有相同的副标题,因为它们都有不同的字幕,因为它们有不同的副主题。
我认为以下代码可以正常工作,但事实并非如此,我不确定我做错了什么。
- (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"])
显示正确的子主题,但不会在搜索表视图的字幕中显示这些结果。
感谢您的帮助!
答案 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;
}
}