cellForRowAtIndexPath插入数组

时间:2011-09-29 19:58:27

标签: iphone objective-c

我遇到了一个奇怪的问题。我有一个自定义的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。

2 个答案:

答案 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";
}