UITableViewCell中的UITextView - 标签问题

时间:2011-09-02 06:24:18

标签: iphone objective-c ios uitableview uitextfield

我在UITableViewCells中有一个带有文本字段的Grouped TableView。

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

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

}


if(indexPath.section < 6) {
    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 10,580, 31)];
    textField.tag = indexPath.section + 22;
    textField.delegate = self;
    [cell.contentView addSubview:textField];
    [textField release];
}
return cell;
}

因此,当我按下Save按钮时,将调用saveItem方法:

- (void)saveItem {
    NSMutableArray *textFieldArray = [[NSMutableArray alloc] init];
    for (int i = 0; i <6; i++) {
        [textFieldArray addObject:(UITextField *)[self.view viewWithTag:22+i]];
    }
...
}

我可以毫无问题地更改前4个TextField的值。它们也被保存,但是当我更改第5或第6个文本字段中的值时,我的应用程序崩溃并且出现错误:

*由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* - [NSMutableArray insertObject:atIndex:]:尝试将nil对象插入0'

有什么建议吗?

到目前为止,谢谢。

4 个答案:

答案 0 :(得分:0)

我认为问题在于:当您点按保存按钮时,并非显示所有部分。因此,当您尝试使用标记5和6访问view时,它们为零,因为它们未显示,因此未从视图中添加(或已删除)。

要对此进行测试,只需尝试滚动到tableView的底部,然后尝试点按保存按钮

答案 1 :(得分:0)

1.你试图访问该对象的时间是不可用的。这意味着[self.view viewWithTag:22 + i]给出nil。

2.tableview不会为所有单元格分配内存。它只分配你可以看到的内存。

3.once滚动你的桌面视图,一旦看到第6部分,然后按下保存按钮你的应用程序不会崩溃。

答案 2 :(得分:0)

只需要修改你的代码

if(indexPath.section <= 6) {     
     UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 10,580, 31)];     
     textField.tag = indexPath.section + 22;     
     textField.delegate = self;     
     [cell.contentView addSubview:textField];     
     [textField release]; 
}

答案 3 :(得分:0)

另外,尽量不要在cellForRowAtIndexPath中创建文字字段。您应该使用initviewDidLoad方法创建它。