我遇到了一个奇怪的问题。我有一个自定义的UITableViewCell,每个单元格都有一个UIButton和UITextField。单击该按钮时,它会将文本字段值更改为某个常量。
现在在cellForRowAtIndexPath方法中我有:
folderTitleTextView.tag=indexPath.row;
[arrayOfTextFields insertObject:folderTitleTextView atIndex:indexPath.row];
NSLog(@"indexpath.row:%i", indexPath.row);
NSLog(@"text fields count %i", [arrayOfTextFields count]);
因此,如果我有两个单元格,那么每次重新加载表格时,它都会向arrayofTextFields添加两个对象,即使它应该替换现有的对象。因此,如果我有两个单元格并且我重新加载表3次,那么由于某种原因,arrayOfTextFields计数为8。
答案 0 :(得分:1)
此folderTitleTextView.tag=indexPath.row;
不是一个好主意,因为所有内容都以0
标记开头,因此在使用viewWithTag:0
或设置行0
访问视图时,会得到奇怪的结果。
我建议您还检查arrayOfTextFields
中的项目数量,并使用[arrayOfTextFields replaceObjectAtIndex:indexPath.row withObject:folderTitleTextView];
或[arrayOfTextFields insertObject:folderTitleTextView atIndex:indexPath.row];
,具体取决于arrayOfTextFields
的当前计数
试试这个:
folderTitleTextView.tag = (indexPath.row + 100);
if ([arrayOfTextFields count] <= indexPath.row) {
[arrayOfTextFields insertObject:folderTitleTextView atIndex:indexPath.row];
} else {
[arrayOfTextFields replaceObjectAtIndex:indexPath.row withObject:folderTitleTextView];
}
NSLog(@"indexpath.row:%i", indexPath.row);
NSLog(@"text fields count %i", [arrayOfTextFields count]);
答案 1 :(得分:1)
问题是你想做什么?
现在,每次显示一个单元格时,都会将textView添加到数组中。
如果您有1个单元格,则阵列中有1个textView,因为cellForRowAtIndexPath:
被称为1次
如果你添加另一个单元格,那么你有2个总单元格cellForRowAtIndexPath将再被调用2次,它会将2个textViews添加到已经有一个单元格的数组中 - > 3
如果添加另一个单元格,则cellForRowAtIndexPath将3个textView添加到已经存在的3个 - &gt; 6
对结果的解释非常重要。
我的建议是摆脱那个阵列并摆脱标签,很可能根本不需要那些。
您可以使用以下内容访问单元格:
- (IBAction)buttonPressed:(UIButton *)sender {
UIView *contentView = [sender superview];
UITableViewCell *cell = (UITableViewCell *)[contentView superview];
// you should assign a tag to the textField of your cell. Use the same tag for each textView in all cells.
UITextField *textField = (UITextField *)[cell viewWithTag:42];
textField.text = @"Foo";
}