暂时停止更新单元格对象

时间:2019-01-28 16:07:03

标签: ios objective-c json uicollectionview

我有一个集合视图,它的数据正在通过某些工具和在线JSON文件进行更新。值会在单元格中保持(连续)更新。

现在,我需要实现一个按钮来“冻结”值并停止任何值更新。只需保持原样显示在集合“视图”中的值

在同一屏幕上的不同视图中,我有多个不同的集合,所以我宁愿处理此特定集合视图的UIViewController中的值的“冻结”(而不是在数据模型或数据获取方法中。)

//At this time, I have my button setup. An IBAction connection that keeps track of the `BOOL` value of whether the button has been pressed or not. 

- (IBAction)holdButtonPressed:(UIButton *)sender {
_holdBtn.selected = ![_holdBtn isSelected];

if(_holdBtn.isSelected) {
    //frozen values

    [self holdMeasurementAirArray];
    UIImage *btnImage = [UIImage imageNamed:@"hold"];
    [_holdBtn setImage:btnImage forState:UIControlStateNormal];
} else {
   //LIVE values
    UIImage *btnImage = [UIImage imageNamed:@"live"];
    [_holdBtn setImage:btnImage forState:UIControlStateNormal];
  }
}

内置一个功能(方法)[self holdMeasurementAirContainer:BOOL],该功能将负责我为此需要做的任何工作。 一个全新的数组,用于在选择holdButton时保存值的副本

-(void)holdMeasurementAirArray {
returnCellsCopy = [_returnCells copy];
supplyCellsCopy = [_supplyCells copy];
 }

然后使用cellForItemAtIndexPath中的值填充表格,直到用户再次点击live

 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

MeasurementCell *cell = (HGMeasurementCell *)[collectionView dequeueReusableCellWithReuseIdentifier:self.measurementCellIdentifier forIndexPath:indexPath];

if(_holdBtn.isSelected == NO) { // IF HOLD ISNT TAPPED

NSArray <MeasurementValue *> *data;
if ([collectionView isEqual:self.return]) {
    data = _returnCells;
} else if ([collectionView isEqual:self.supply]) {
    data = _supplyCells;
} 

HGMeasurementValue *cellData = [data objectAtIndex:indexPath.section];
cell.measurement = cellData;
cellData.collectionView = collectionView;
cellData.indexPath = indexPath;

[cell.measureLabel setText:cellData.value];
[cell.measureLabel setTextColor:cellData.labelColor];
return cell;

} else {

    NSArray *holdData;
    if ([collectionView isEqual:self.return]) {
        holdData = returnCellsCopy;
    } else if ([collectionView isEqual:self.supply]) {
        holdData = supplyCellsCopy;
    } 

    HGMeasurementValue *holdCellData = [holdData         objectAtIndex:indexPath.section];
    cell.measurement = holdCellData;
    holdCellData.collectionView = collectionView;
    holdCellData.indexPath = indexPath;

    [cell.measureLabel setText:holdCellData.value];
    [cell.measureLabel setTextColor:holdCellData.labelColor];

    return cell;
}

}

...但是,它不起作用。它只是像常规一样不断更新值。即使我制作了一个数组[copy],但我认为这就像在那个时间和地点为该数组拍摄一个不变的快照(这是我所需要的)。

当我单击按钮时,该应用程序不会崩溃,因此它仍在不断从数组中填充。

我在SO上到处都在寻找一种方法或需要尝试的方法。

有没有可以帮助我的辅助方法? 您能看到我缺少的一些东西来停止更新单元格吗? 我误会了[副本]的功能吗?如果是这样,您能否进一步解释? 设计目标:完整保留集合视图中显示的值

有什么帮助,非常感谢!

0 个答案:

没有答案