gpt4 book ai didi

iphone - 在 UITableViewCells 中维护 UITextFields 中的文本

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:03:03 25 4
gpt4 key购买 nike

我的问题:我有一个用于创建列表的 UITableView 部分。每个 TableViewCell 中都有 UITextField。当您开始在文本字段中键入内容时,将插入一个新单元格。所有这些功能都能完美运行。但是,如果用户创建了许多单元格,它们就会离开屏幕并出现问题。具体来说,该部分顶部的单元格开始被重用。这会导致新单元格中出现不需要的文本,并删除旧单元格中的文本。我该如何解决这个问题?

此问题的图片: (在第二张图片中,当我开始输入第 6 项时,第 1 项出现在它下方)

enter image description here

enter image description here

创建 UITableViewCells 的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"AddListInformationCellid";


UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {

// Intialize TableView Cell
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
cell.accessoryType = UITableViewCellAccessoryNone;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.backgroundColor = [UIColor whiteColor];


// Initialize TextField
// ... code ommitted for brevity

// Custome intializiation per each kind of TextField
if (indexPath.section == 0) {
playerTextField.tag = 0;
playerTextField.placeholder = @"Title";
}
else if (indexPath.section == 1) {

// Here's where the problem starts *********

playerTextField.tag = indexPath.row + 1;
playerTextField.placeholder = @"List Item";
}

[cell.contentView addSubview:playerTextField];
}


return cell;
}

添加/删除单元格的代码

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

NSInteger section = [self.tableView indexPathForCell:(UITableViewCell *)textField.superview.superview].section;
NSInteger row = [self.tableView indexPathForCell:(UITableViewCell *)textField.superview.superview].row;

if (section == 0) {

_myList.name = textField.text;
}
else if (section == 1) {

// Delete cell that is no longer used
if ([string isEqualToString:@""]) {
if (textField.text.length == 1) {
if (cellCount > 1) {
cellCount = cellCount - 1;

[self.tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:row inSection:1]] withRowAnimation:UITableViewRowAnimationAutomatic];

textField.text = @"";
}
}
}

// Add a new cell
if (self.beganEditing) {
if (![string isEqualToString:@""]) {
if (row == [self.tableView numberOfRowsInSection:1] - 1) {
cellCount = cellCount + 1;
[self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:row + 1 inSection:1]] withRowAnimation:UITableViewRowAnimationAutomatic];
self.beganEditing = NO;
}
}
}
}

return YES;
}

最佳答案

正如@Bruno 所说,您需要注意在单元格的初始化中放入了什么。一个好的通用规则是只将通用规则放入 cell == nil 条件中。 任何依赖于表格 View 中单元格位置的内容都需要超出此 if 语句。

在上面的代码中,您有一条注释“每个文本字段的自定义初始化”。这是一个很好的指标,表明此代码需要超出 if 语句。

其次,您不能依赖表格 View 单元格来为您保存数据。如果您还没有,则需要保留一个字符串数组来表示文本字段区域中的每个条目。然后当表格 View 要求一个单元格时,你可以根据它的索引路径设置每个文本字段的文本 cell == nil 条件.

查看 this answer

希望这对您有所帮助!

关于iphone - 在 UITableViewCells 中维护 UITextFields 中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17713240/

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