2011-09-02 235 views
0

我有一个UITableViewCells文本框的分组TableView。UITableViewCell中的UITextView - 标签问题

- (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; 
} 

因此,当我点击保存按钮,将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的值不会有问题。他们也被保存,但是当我改变在第五或第六文本字段的值,我的应用程序崩溃,我得到一个错误:

*终止应用程序由于未捕获的异常“NSInvalidArgumentException”,原因是:“* - [ NSMutableArray insertObject:atIndex:]:试图在0处插入nil对象'

有什么建议吗?

到目前为止感谢。

+0

是否显示所有六个部分? – Nekto

+0

是的,他们也充满了正确的价值观。 – jussi

+0

如果您在创建新单元格时仅添加文本字段,那么此时您正在向可能已有单元格的单元格添加文本字段。 – jrturton

回答

0

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

要测试此操作,只需滚动到您的tableView的底部并尝试点击保存按钮

+0

好吧,它可以工作,当我关闭键盘并使所有单元格可见时。那么我怎样才能用键盘隐藏它们来访问它们? – jussi

+0

你应该在'UITableViewController'的某些变量中保存'textField'的值,否则你将失去它们的值。 – Nekto

+0

好吧,它现在完美的工作'textFieldDidEndEditing'。谢谢! – jussi

0

1.您尝试访问该对象的方式对您来说无法使用,这意味着[self.view viewWithTag:22 + i]会给出零。

2.tableview不会将内存分配给所有单元格。它只分配内存,您可以看到它。

3.once滚动你的tableview,一旦看到第6节,然后按保存按钮你的应用程序将不会崩溃。

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]; 
} 
+0

这不一样吗? – jussi

0

此外,TY不要在你的cellForRowAtIndexPath创建文本框。您应该在您的initviewDidLoad方法中创建它。