我使用带有可重用单元格的表格 View 。在每个单元格上,我都有一个带有文本的文本字段,我可以对其进行修改。如果文本为空,我会删除该单元格。
假设我们有 100 行,我们想要修改第 1 行:我们点击它,给出一个空字符串 @"",向下滚动到位置号 50 并点击此单元格。
现在的情况是,我们检测到另一个单元格上的点击手势,然后我调用方法 textFieldDidEndEditing: 来查看是否应该从表格 View 中删除该单元格。我使用 cellForRowAtIndexPath: 来获取修改后的单元格。
问题是出现其他单元格的文本字段为空。我删除了修改过的单元格,但只删除了一个。我认为这是可重复使用单元的问题。
谁能帮我解决这个问题吗?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *ImageIdentyfier = @"StandardCellWithImageIdentifier";
StandardCellWithImage *cellImage = (StandardCellWithImage *)[tableView dequeueReusableCellWithIdentifier:ImageIdentyfier];
if(cellImage == nil) {
cellImage = [[StandardCellWithImage alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ImageIdentyfier];
}
cellImage.nameLabel.delegate = self;
Item *item = [self.mutableFetchResults objectAtIndex:indexPath.row];
cellImage.nameLabel.text = item.itemText;
cellImage.infoLabel.text = item.itemInfo;
cellImage.checkbox.userInteractionEnabled = YES;
cellImage.nameLabel.userInteractionEnabled = NO;
if(item.itemIsChecked.boolValue == YES) {
cellImage.checkbox.tag = indexPath.row;
[cellImage.tapGesture addTarget:self action:@selector(didSelectedImageAtIndexPath:)];
cellImage.checkbox.image = [UIImage imageNamed:@"checkbox-checked.png"];
} else {
cellImage.checkbox.tag = indexPath.row;
[cellImage.tapGesture addTarget:self action:@selector(didSelectedImageAtIndexPath:)];
cellImage.checkbox.image = [UIImage imageNamed:@"open-checkbox.png"];
}
return cellImage;
}
最佳答案
当您从第 1 行滚动到第 50 行时,现有的单元格将被重复使用 - 包括带有空文本字段的单元格。这就是为什么您会多次看到它,以及为什么您的删除例程只删除了一个而不是全部。
听起来您在 cellForRowAtIndexPath
方法中创建的单元格需要修复,以确保空文本字段不会自动复制到回收的单元格。在看不到任何代码的情况下,这个练习就留给您了。
查看了代码,谢谢。找不到任何“简单”的修复方法,因此建议您应该避免该问题。因此,也许您应该检查列表滚动,而不是检查单元格点击。
您遇到的问题仅是因为正在编辑的单元格由于用户滚动列表而被回收。因此,可以通过以下方式解决该问题:a) 在编辑文本时不要让用户滚动或 b) 当用户开始滚动时停止文本编辑。
关于iphone - 使用 cellForRowAtIndexPath : method 修改现有的可重用单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14725874/