如何隐藏UITableView中的特定单元格

时间:2013-06-26 11:32:58

标签: objective-c uitableview

我从带有AFNetworking的MySQL数据库中获取数据,数据正在进入,并且正在进行中 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

我有代码来检查当前登录用户是否等于MySQL中的字段'creator',条目显示但我希望隐藏空单元格。

if ([creator isEqual: userID]) {

    [cell.contentView addSubview:imageView];

    cell.textLabel.text = [[NSString alloc] initWithFormat:@"       %@",[tempDictionary objectForKey:@"team_name"]];
    cell.detailTextLabel.text = [[NSString alloc] initWithFormat:@"%@        %@ \n%@", [tempDictionary objectForKey:@"date"], [tempDictionary objectForKey:@"time"], [tempDictionary objectForKey:@"location"]];

} else {

    [imageView removeFromSuperview];

    cell.textLabel.text = nil;
    cell.detailTextLabel.text = nil;

}

UITableView只显示所选字段的数据,但也显示所有其他空单元格(因为它仍在计算数组)。

3 个答案:

答案 0 :(得分:2)

执行此操作的唯一方法是更新数据源阵列,还需要从数据源阵列中删除该对象。如果你想保持这些值,那么你可以再维护一个数组,你可以过滤那个数组来获取所有具有值的对象,并使用谓词来填充带有过滤对象的数据源数组。我希望这会对你有所帮助。

答案 1 :(得分:1)

我建议您在加载anotherArray之前使用您的条件(masterArray)从([creator isEqual: userID])准备tableView并使用此{{1}加载tableView }}

答案 2 :(得分:0)

可以通过在- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath中将高度设置为零来隐藏单元格。

第一个选项是设置一些标记以隐藏空单元格。

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

if ([creator isEqual: userID]) {

    [cell.contentView addSubview:imageView];

    cell.textLabel.text = [[NSString alloc] initWithFormat:@"       %@",[tempDictionary objectForKey:@"team_name"]];
    cell.detailTextLabel.text = [[NSString alloc] initWithFormat:@"%@        %@ \n%@", [tempDictionary objectForKey:@"date"], [tempDictionary objectForKey:@"time"], [tempDictionary objectForKey:@"location"]];

hideCells = NO;

} else {

    [imageView removeFromSuperview];

    cell.textLabel.text = nil;
    cell.detailTextLabel.text = nil;
hideCells = YES;

}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
 if(indexPath.row == someCell && hideCells == YES)
return 0;
else
return 44;
}

第二个选项是您在数据源词典中添加额外的键值对,以便在需要隐藏单元格时进行跟踪。

if ([creator isEqual: userID]) {

    [cell.contentView addSubview:imageView];

    cell.textLabel.text = [[NSString alloc] initWithFormat:@"       %@",[tempDictionary objectForKey:@"team_name"]];
    cell.detailTextLabel.text = [[NSString alloc] initWithFormat:@"%@        %@ \n%@", [tempDictionary objectForKey:@"date"], [tempDictionary objectForKey:@"time"], [tempDictionary objectForKey:@"location"]];

[array replaceObjectAtIndex:indexPath.row withObject:@"YES"];

} else {

    [imageView removeFromSuperview];

    cell.textLabel.text = nil;
    cell.detailTextLabel.text = nil;
[array replaceObjectAtIndex:indexPath.row withObject:@"YES"];

}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
 if([[array objectAtIndex:indexPath.row]isEqualToString:@"NO"] )
return 0;
else
return 44;
}