gpt4 book ai didi

ios - dequeueReusableCellWithIdentifier :CellIdentifier how to avoid it

转载 作者:行者123 更新时间:2023-11-28 18:19:48 34 4
gpt4 key购买 nike

我正在使用表格 View 来显示从服务器加载的文本字段数组,所以我有一个表格 View 字段列表,当我填充这些数据字段并向下滚动以填充其他字段时,当我再次向上滚动时,我发现值发生变化并且存在重复值

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *CellIdentifier = @"FieldCell";
//FieldCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

FieldCell *cell = [[FieldCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

//Filling The DataHere
cell.cellImage.image = [UIImage imageNamed:[images objectAtIndex:indexPath.row]];
cell.cellTextField.placeholder = [placeHolders objectAtIndex:indexPath.row] ;

// Configure the cell...
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.backgroundColor = [UIColor clearColor];
return cell;

}

我认为 dequeueReusableCellWithIdentifier:CellIdentifier 中的问题是因为它重新分配和分配单元格,但我不想这样做我想让内存中的所有东西都有它的值

最佳答案

您的 cellForRowAtIndexPath 负责获取单元格并将正确的值放入其中 - 这就是我要求您展示整个方法的原因。您在问题中输入的代码不是完整的 cellForRowAtIndexPath 方法。

更新 - 我包含了一个从单元格到 TableView 的简单委托(delegate)回调,以允许单元格中的 UITextField 委托(delegate)更新后备存储。我没有为委托(delegate)使用适当的协议(protocol),因为我想快速将其组合在一起。

FieldCell.h

@class TableView

@property (strong,nonatomic) TableView *delegate;
@property (strong,nonatomic) NSIndexPath indexPath;
@property (strong,nonatomic) UITextField *textField;

FieldCell.c

#import <TableView.h>

#pragma mark -
#pragma mark UITextFieldDelegate

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (self.delegate)
{
[self.delegate updateCellText:[textField.text stringByReplacingCharactersInRange:range withString:string] forIndexPath:self.indexPath;

}
return YES;
}

表格 View .h

@property (strong,nonatomic) NSMutableArray *cellTexts;       //  You need to initialise this as an array full of empty NSStrings or whatever the initial cell values should be

- (void) updateCellText:(NSString *)text forIndexPath:(NSIndexPath)indexPath;

表格 View .c

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"FieldCell";
FieldCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
cell.indexPath=indexPath;
cell.delegate=self;
cell.textField.text=[self.cellTexts objectAtIndex:indexPath.row]; // modify this as required to actually put your data to be displayed into the cell's properties

return cell;
}

- (void) updateCellText:(NSString *)text forIndexPath:(NSIndexPath)indexPath
{

[self.cellTexts replaceObjectAtIndex:indexPath.row withObject:text];
}

关于ios - dequeueReusableCellWithIdentifier :CellIdentifier how to avoid it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22750756/

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