2011-09-02 162 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方法中創建它。