UiCollectionViewCell里面的Uitableview

时间:2013-12-10 03:22:02

标签: ios objective-c uitableview uicollectionview

有没有人在collectionViewCell中使用tableView有经验?

我在collectionViewCell中有一个tableview(每个都是全屏视图)。每个collectionViewCell都显示自己的唯一数据。您可以在每个collectionViewCell之间水平滚动。 tableview有一个带有几个标签的自定义tableviewCell。我正在使用tableview来利用内置的tableview重新排序功能。

第一个collectionViewCell加载正确,数据正确显示在tableview中。但是,当我在collectionView单元格之间滚动时,tableView为空(在标签中仅显示占位符文本),直到collectionViewCell停止滚动,然后tableview突然显示正确的数据。

关于如何确保tableview的任何建议在显示之前已经填充了正确的数据?我需要它已经存在,因为用户拖动下一个collectionViewCell(就像背景图像/标题文本已经存在)。

Here's a link to my project so you can see the code.

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:1)

我没有经历过那样做。

但我认为您可以减少创建对您的单元格的引用的问题。所以你的细胞不会被释放。您可以使用数组来执行此操作。

编辑:

您的问题是您使用计时器更新TableViewCell

中的标签

你可以改变这个:

if (!timer) {
        timer = [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(updateLabels:) userInfo:nil repeats:YES];
    }

为此:

[self updateLabels:nil];

并为此更改updateLabels:

- (void)updateLabels:(NSTimer *)_timer
{
    if (!timer) {
        timer = [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(updateLabels:) userInfo:nil repeats:YES];
    }

    unitOfTimeLabel.text = nameOfTimeLabel;

    if ([nameOfTimeLabel isEqualToString:@"Days"]) amountOfTimeLabel.text = [self daysRemaining];
    if ([nameOfTimeLabel isEqualToString:@"Hours"]) amountOfTimeLabel.text = [self hoursRemaining];
    if ([nameOfTimeLabel isEqualToString:@"Minutes"]) amountOfTimeLabel.text = [self minutesRemaining];
    if ([nameOfTimeLabel isEqualToString:@"Seconds"]) amountOfTimeLabel.text = [self secondsRemaining];
}

答案 1 :(得分:1)

collectionviewcontroller中的

替换此方法。在这里,我们可以动态地将值设置为单元格

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    tableViewTimeDisplayCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

    if (cell == nil) {

        NSArray *arrayCellXib = [[NSBundle mainBundle] loadNibNamed:@"tableViewTimeDisplayCell"
                                                              owner:self
                                                            options:nil];

        cell = arrayCellXib[0];//[arrayCellXib objectAtIndex:0];
        [cell setNameOfTimeLabel:cellOrderArray[indexPath.row]];//[cellOrderArray objectAtIndex:1] here we can make it as dynamic index
        [cell setEventNumber:eventNumber];
        [cell startTimer];
    }

    return cell;
}

//我想问题是当我们水平滚动时Tableview再次分配以及集合视图。在集合视图中,我删除了除重新加载tableview以外的代码并粘贴在initwithframe中。由于视图是在每次发生这种情况时进行分配。