我有一个集合视图,它的数据正在通过某些工具和在线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上到处都在寻找一种方法或需要尝试的方法。
有没有可以帮助我的辅助方法? 您能看到我缺少的一些东西来停止更新单元格吗? 我误会了[副本]的功能吗?如果是这样,您能否进一步解释? 设计目标:完整保留集合视图中显示的值
有什么帮助,非常感谢!