2011-11-08 98 views
0

我有一個iPhone應用程序與表單輸入屏幕。我通過製作具有UILabelUITextfield的自定義UITableViewCell來完成此操作。我設置它以便「cellForRowAtIndexPath」從Core Data獲取適當的值,UITextField's「textFieldDidEndEditing」方法將適當的值保存到Core Data。它的偉大工程...除了:自定義UITableViewCell的困境

如果我編輯的文本字段,然後滾動它關閉屏幕,然後在另一個單元格的文本字段:

  1. 細胞已經自動釋放,因爲它滾動屏幕外
  2. 的「textFieldDidEndEditing」得到一個錯誤訪問錯誤

我完全理解這個問題,我只是不知道解決它的最好辦法。我的第一個想法是添加從「textFieldDidEndEditing」到「dealloc」的邏輯,但這似乎很難。有什麼建議麼?

回答

2

我結束了使用滾動視圖的委託方法(這是建立在對的UITableView)。當用戶開始拖動時,我辭去了第一響應者。

這很好用,因爲它看起來不錯,當用戶開始滾動時會調用「textFieldDidEndEditing」,這始終在文本字段熄滅屏幕之前。

+0

對於那些想知道的,我用 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView委託方法 – SMSidat

1
  • 禁止在編輯
  • 保留您的文本框

是你可以做的事情滾動。在我看來,最好是在編輯時禁用滾動功能,因爲用戶不需要,所以請確保他也不能這樣做。限制用戶可以做的事情,使其更「安全」,更易於用戶使用。

如果你不確定這些事情,只要看看蘋果是幹什麼的,他們永遠都是正確的應用程序。就像在iOS 5的設置應用程序中一樣,當您更改手機的名稱時。您只需獲得1行中的下一個tableview中,所以你不能真正惹任何東西作爲用戶..

0

在您的自定義單元格的dealloc中,設置文本框的委託,以零

0

我有一個類似的問題..問題在於可重用的單元格作爲表視圖的一部分。每次滾動表格時,都會調用cellforRowatIndexPath,並使單元出隊並返回它。不幸的是,這個功能不能很好地處理具有可保留數據的單元格,如標籤。因此,你必須選擇你自己的方法去除細胞。

我有一個叫做單元格的NSMutableArray,它包含我所有的單元格。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
CustomTableViewCell *cell = [self dequeuwReusableCellwith:indexPath]; 
if (cell == nil) 
{ 
    cell = [[CustomTableViewCell alloc] init]; 
    [cells addObject:cell]; 
} 
// Configure the cell. 
NSString *temp = [NSString stringWithFormat:@"Cell %d",indexPath.row]; 
cell.textField.placeholder=temp; 
return cell; 
} 

這是我自定義的方法來取消可重用的單元格。

-(CustomTableViewCell*)dequeuwReusableCellwith:(NSIndexPath*)indexpath 
{ 
if([cells count]>indexpath.row) 
{ 
    return [cells objectAtIndex:indexpath.row]; 
} 
return nil; 
} 

希望這有助於...