在TableView中迭代NSMutableArray时跳过行

时间:2014-10-09 10:15:36

标签: ios objective-c uitableview loops

我在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,所以我可以存储我想要填充那些,然后迭代那个?

感谢所有帮助!!

3 个答案:

答案 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)

正如你所说&#34;所以我有一个包含一些对象的NSMutableArray。我只想用一些对象填充表格单元格。&#34;所以理想情况下应该有两个数组,1.LiveGamesArray,2。创建一个新的过滤器数组,如下所示:

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。 希望它会对你有所帮助。

相关问题