gpt4 book ai didi

ios - 添加新单元格时, Collection View 单元格静态变量会发生变化

转载 作者:行者123 更新时间:2023-12-01 20:06:48 28 4
gpt4 key购买 nike

我正在尝试使用 CollectionView 自定义单元格,我需要从 Collection View 单元格自定义类本身更新单元格。

这是自定义单元格类

Cell_Obj.h

#import <UIKit/UIKit.h>

@interface Cell_Obj : UICollectionViewCell
@property (weak, nonatomic) IBOutlet UILabel *label;

- (void)changeImage;
- (void)updateTextLabelName:(NSString*)str;
@end

Cell_Obj.m
#import "Cell_Obj.h"
static NSString *labelTxt ;
@implementation Cell_Obj{

}

+ (void)initialize {
if (self == [Cell_Obj class]) {
labelTxt = [[NSString alloc] init];


}
}


- (id)initWithFrame:(CGRect)frame
{

self = [super initWithFrame:frame];
if (self) {


}
return self;
}


- (void)awakeFromNib {

_label.text = labelTxt;

[NSTimer scheduledTimerWithTimeInterval:2.0f
target:self
selector:@selector(updateLabel)
userInfo:nil
repeats:YES];
}


- (void)updateLabel
{

NSString * txt = [NSString stringWithFormat:@"%@",labelTxt];
_label.text = txt;
}

- (void)updateTextLabelName :(NSString*)str
{

labelTxt = str;
}

@end

我在 viewCotroller 中添加单元格的位置,
- (void)addCell
{
Cell_Obj *cell = [[Cell_Obj alloc] init];

NSString * txt = [NSString stringWithFormat:@"%d",[GridArray count]];
[cell updateTextLabelName: txt];


[GridArray addObject:cell];
[_collection insertItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:[GridArray count]-1 inSection:0]]];


}

上面代码的问题是,当我添加第一个单元格时,第一个单元格的标签为 0,这很好,但是当我添加第二个单元格并且计时器调用发生时,cell1 和 cell2 的标签值为 1。它应该有分别为 0,1。

并且似乎单元对象在已创建的单元上发生任何更新时共享静态变量,例如计时器事件。

为什么会发生这种情况,我的方法有什么错误吗?

请让我知道您的宝贵建议。

编辑

根据以下答案,我已将静态变量作为实例变量移动,
@implementation Cell_Obj{
NSString *labelTxt ;
}

但在 updateLabel 里面 labelTxt是零。我在哪里调试 updateTextLabelNameupdateLabel 之前调用和 labelTxt有正确的值(value)。

最佳答案

这是因为collectionview 会重新调用单元格以提高内存效率。所以每次它都会调用awakeFromNib当它使单元格出队时。所以你应该使用 Collection View datasource methods更新或设置 Collection View 控件的内容。你应该执行cellForItemAtIndexPath在标签中设置数据!!

关于ios - 添加新单元格时, Collection View 单元格静态变量会发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38726593/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com