我在UITableView中获得了这段代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier = @"Cell2";
GamesInfoTableViewCell *cell = (GamesInfoTableViewCell *)[tableView dequeueReusableCellWithIdentifier:identifier];
GameInfo *gameInfoObject;
gameInfoObject =[LiveGamesArray objectAtIndex:indexPath.row];
if ([gameInfoObject.GameTime isEqual: @"FT"] | ([gameInfoObject.GameTime rangeOfString:@":"].location != NSNotFound)){
--------------> What to do here? <----------------------------
}
cell.backgroundColor = TABLECOLOR;
cell.homeTeamLabel.textColor = TEXT;
cell.awayTeamLabel.textColor = TEXT;
cell.gameTimeLabel.textColor = TEXT;
cell.liveButton.image = [UIImage imageNamed:@"1675447.png"]; //Load the green image
cell.awayTeamLabel.text = gameInfoObject.AwayTeam;
cell.homeTeamLabel.text = gameInfoObject.HomeTeam;
cell.homeTeamScoreLabel.text = gameInfoObject.HomeScore;
cell.awayTeamScoreLabel.text = gameInfoObject.AwayScore;
cell.gameTimeLabel.text = gameInfoObject.GameTime;
// Configure the cell...
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}
所以我有一个包含一些对象的NSMutableArray。我只想用一些对象填充表格单元格。 If语句检查它是否为true,然后我希望它继续使用数组中的下一个对象/行。我尝试了几件事,但都做不到。是唯一的解决方案,使另一个NSMutableArray,所以我可以存储我想要填充那些,然后迭代那个?
感谢所有帮助!!
答案 0 :(得分:1)
是的,您应该在cellForRowAtIndexPath中过滤数组,该数组将被多次调用。所以我建议在加载表之前准备好数组。
答案 1 :(得分:0)
阻止您使用条件内cellForRowAtIndexPath
对其进行编码的关键问题是索引路径中的row
表示尚未跳过的所有项的累计值。因此,您需要在决定要打印的内容时考虑数组中的所有值。
唯一可以制作另一个
NSMutableArray
的解决方案,以便我可以存储我想要填充的那些,然后遍历那个?
这将是一个很好的解决方案。这比从每次开始遍历数组的替代方法要好得多,计算匹配的对象,直到你跳过row-1
个对象,然后选择下一个。
另一种选择是构建转换表 - 即将行映射到原始NSMutableArray
中的索引的索引数组。您可以在为UITableView
提供行计数的方法中构建此表,并将其保留到下一次刷新。
假设您的NSMutableArray
看起来像这样:
0 1 2 3 4 5 6 7 8 9
N Y Y N N Y N Y N N
顶行显示元素索引。 Y
是您要保留的项目; N
是您不想展示的项目。您的行计数方法返回4(Y
s的数量),并构建一个如下所示的表:
0 1 2 3
1 2 5 7
顶行是索引数组的索引。底行是原始数组的索引。您的cellForRowAtIndexPath
代码需要选择
gameInfoObject =[LiveGamesArray objectAtIndex:translation[indexPath.row]];
对于第0行,translation[indexPath.row]
为1;对于第1行,翻译为2;对于第2行,翻译为5,对于第3行,则为7。
答案 2 :(得分:0)
NSMutableArray * filterArray = [NSMutableArray array];
for (GameInfo *gameInfoObject in LiveGamesArray)//can use predicate also
{
@autorelease{
if ([gameInfoObject.GameTime isEqual: @"FT"] || ([gameInfoObject.GameTime rangeOfString:@":"].location != NSNotFound)) {
[filterArray addObject:gameInfoObject];
}
}
}
3.在tableview的所有数据源/委托方法中使用此filterArray。 希望它会对你有所帮助。