有没有人在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.
任何帮助表示赞赏!
答案 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)
替换此方法。在这里,我们可以动态地将值设置为单元格
-(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中。由于视图是在每次发生这种情况时进行分配。