2013-01-16 72 views
5

在我的應用程序中,我有一些views需要就地editable。我有tableviewcells安裝程序,其中包括一個UITextField已啓用,並且文本可以更改,這很好,它的工作原理。在表格視圖單元格中編輯文本字段的最佳方法

我的問題是跟蹤這些最好的方法是什麼?我應該:

  • 保持每個ivar。如果是這樣,然後
    • 如何確保每個cell具有正確的字段,如果它只是實例化一次?
  • 有一個textfield創建cell和簡單的配置cell時,將其值設置時添加。如果是的話
    • 我該如何跟蹤這些值?如果cell退出view然後返回,其值將被重置爲其原始值而不是編輯值。

什麼方法,你通常傾向於使用這個方案?特別是如果您正在處理大量的cells

+0

這將是一個更好的問題http://programmers.stackexchange.com/ – iDev

+0

我不好,對不起。下次會做:) – PaReeOhNos

回答

2

最好的方法是遵循MVC並實現你的模型,在你的情況下是textfield值。你所做的就是將這些值存儲在一個數組中,並在你的cellForIndexPath方法中引用數組中的正確值。例如,表(indexPath.row == 0)的第一行將檢索數組中的第一個元素。 textField中的更改將記錄在數組中的相應元素上。

+0

我怎麼知道要更新數組的哪個元素?這只是基於索引路徑還是當前單元?因此第5行可能會映射到數組索引5(假設沒有節) – PaReeOhNos

+0

索引路徑是實現它的最佳方式。 – sosborn

2
  • 子類UITableViewCell並在其init方法中添加一個UITextField。

  • 爲自定義單元類創建一個協議。當UITextField開始編輯或結束編輯時調用委託的方法。

  • 的控制器,實現自定義單元格的協議,並設置的tableView的indexpath行值單元格的標籤:的cellForRowAtIndexPath:

所以每次你編輯的UITextField的時候,你可以在控制器知道哪一行編輯(via cell's tag)

10
  1. 將所有文本字段的值存儲在數據模型的可變數組中。

  2. tableView:willDisplayCell:forRowAtIndexPath:設置您的文本字段的值,使用基於索引路徑的數組中的值。

  3. 當文本字段結束編輯時,立即將值存儲回數組中。目前已是該協議(所以沒有必要寫你自己的),但它比正常麻煩一點,因爲你沒有交到indexPath需要找一個與你的文本字段相關聯的一個:

    - (void) textFieldDidEndEditing:(UITextField *)textField { 
        CGRect location = [self convertRect:textField.frame toView:self.tableView]; 
        NSIndexPath *indexPath = [[self.tableView indexPathsForRowsInRect:location] objectAtIndex:0]; 
    
        // Save the contents of the text field into your array: 
        [yourArray replaceObjectAtIndex:indexPath.row withObject:textField.text]; 
    } 
    
+1

太棒了!這種方法比使用變量存儲indexPath創建自定義文本字段要好得多。當您移動單元格時,這需要較少的工作量 – user1046037

相關問題