2012-10-02 105 views
2

我想從UITextField中保存某些值,但是我無法這樣做,因爲每當我滾動時,UITextField中就沒有任何內容。我正在使用自定義單元格。我知道自定義單元格必須在特定的視圖中加載,因此我使用textFieldDidEndEditing將值存儲在數組中。不過,我得到了以下錯誤消息: *終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因是: '* - [__ NSArrayM insertObject:atIndex:]:對象不能是零'UITextField在UITableView中滾動時清除 - 自定義單元格

幫助深表感謝! !我的代碼如下,我在IOS開發中很新。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    if (indexPath.section == 0) { 
    if (indexPath.row == 7) { 
     static NSString *CellIdentifier = @"RevButtonCell"; 

     RevButtonCell *cell = (RevButtonCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

     if (cell == nil) { 
     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"RevButtonCell" owner:self options:nil]; 
     cell = [topLevelObjects objectAtIndex:0]; 
     [cell.revsaveB addTarget:self action:@selector(revaddparse:) forControlEvents:UIControlEventTouchUpInside]; 

     cell.reveditdeleteB.hidden = YES; 
     cell.reveditsaveB.hidden = YES; 
     cell.revsaveB.hidden = NO; 
     cell.revdeleteB.hidden = NO; 

     } 
     return cell; 
    } else { 

     static NSString *CellIdentifier = @"TextCell"; 

     TextCell *cell = (TextCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

     if (cell == nil) { 
     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"TextCell" owner:self options:nil]; 
     cell = [topLevelObjects objectAtIndex:0]; 
     } 

     cell.detaillabel.text = [revdetailsA objectAtIndex:indexPath.row]; 

     cell.detailtext.placeholder = @"Enter Text"; 
     cell.detailtext.tag = indexPath.row; 
     cell.detailtext.delegate = self; 

     if (indexPath.row == 0) { 
     cell.detailtext.text = dateS; 
     } 
     if (indexPath.row == 1) { 
     cell.detailtext.text = clientS; 
     } 
     if (indexPath.row == 2) { 
     cell.detailtext.text = productS; 
     } 
     if (indexPath.row == 3) { 
     cell.detailtext.text = amountS; 
     } 
     if (indexPath.row == 4) { 
     cell.detailtext.text = qtyS; 
     } 
     if (indexPath.row == 5) { 
     cell.detailtext.text = taxS; 
     } 
     if (indexPath.row == 6) { 
     cell.detailtext.text = totalS; 
     } 

     cell.selectionStyle = UITableViewCellSelectionStyleNone; 

     return cell; 
    } 
    } 
} 

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    [client insertObject:clientS atIndex:0]; 
    [product insertObject:productS atIndex:0]; 
    [date insertObject:dateS atIndex:0]; 
    [amount insertObject:amountS atIndex:0]; 
    [qty insertObject:qtyS atIndex:0]; 
    [tax insertObject:taxS atIndex:0]; 
    [total insertObject:totalS atIndex:0]; 
} 
+0

看到它不是強制性的,爲每個文本字段值創建數組,但是您的每個文本字段值保留在該文本文件中僅使用波紋管代碼,但不插入數組中的insertObject。 –

回答

0

初始化的瓦萊斯空字符串作爲

clientS = @""; 
productS = @""; 
dateS = @""; 
amountS = @""; 
qtyS = @""; 
taxS = @""; 
totalS = @""; 
+0

@megna我不知道如何將文本保存到這些變量?以及在索引0處存儲在數組中的想法? –

+0

我認爲你的意思是@「」,而不是「」。一個是NSString文字,另一個是空的C字符串(char *)。 –

+0

@MattLong感謝亞光,這些天'C#'是我的頭,在此之前,它是'Java'所以這些愚蠢的錯誤在我的代碼是常見的了。但我有編譯器:) –

0

只是利用一切CellIdentifier是不同的使用CellIdentifier像波紋管

,並在這裏使用此代碼後,不需要創建陣列和插入對象,所以不要創建數組只是使用此代碼..

NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d%d",indexPath.section,indexPath.row]; 

使用CellIndentifier insted的另一種像「TextCell」和「扣式」

我希望這會幫助你...

:)

+0

你應該詳細說明你的答案。爲每個單元格使用新的單元標識符對於正常的動態內容來說是一個糟糕的主意。實質上它完全消除了細胞再利用。原因表視圖可以如此高效,因爲您正在重新使用單元格。您使用相同的標識符來確保重新使用實際上正在發生。話雖這麼說,在靜態細胞的情況下,有被使用的細胞數量有限的,你可以說這是一個簡單的訪問要直接的細胞的方法。 –

+0

哎@MattLong如果上述不同cellIdentifier是用那麼這裏不創造儲值新陣列所需,是嗎? –

+0

是的,這是正確的。我只是建議你在你的答案中解釋一下。這是一種合理的方法,但僅僅是因爲您沒有顯示包含大量行的動態內容。 –

0

像你正試圖實現靜態細胞看起來從您的代碼在表視圖中。你可能想要考慮的是使用故事板並創建一個支持使用Interface Builder的靜態表格單元格的表格視圖。這將允許您消除整個cellForRowAtIndexPath:方法。如果你不能使用故事板,那麼你將不得不像你一樣管理你的單元格,但在我的書中,任何時候你可以消除代碼,你應該。

如果你打算使用一個故事板,有幾件事情你應該知道:

  • 您的看法情節板中的控制器需要一個表視圖控制器
  • 您設置表格內容領域以「靜態單元格」
  • 添加你想要將其拖動到細胞中使用到每個電池的文本框您在視圖控制器頭添加
  • 創造出口,然後拖動連接到他們在Interface Builder

有一些使用靜態單元格的表視圖的教程。他們可能有點長,然而,堅持他們,你應該能夠產生你正在尋找的結果。

此致敬禮。

相關問題