2011-09-03 53 views
0

我有一個是被實例化(在「的cellForRowAtIndexPath」法)設置文本當未選擇細胞

[cell setAccessoryType:UITableViewCellAccessoryDetailDisclosureButton]; 

當點擊了「附件按鈕」一個UITableViewCell,我有一個的UIDatePicker是彈出應該將單元格的文本設置爲被選中的日期。拾取器出現,我的單元格不是零,但是,我看不到單元格的實際文本(日期),直到單擊它(單元格,而不是「附件按鈕」)。

這裏是設置文本的代碼:

targetCell.textLabel.text = [formatter stringFromDate:_datePicker.date]; 

targetCell是當該方法的一個實例變量感組:「accessoryButtonTappedForRowWithIndexPath」之稱。

就像我說的,我知道文本正在單元格中設置,因爲當我點擊實際的單元格時,我可以看到在選擇器中選擇的日期。

+0

執行此語句的內部方法是什麼? 'targetCell.textLabel.text = [formatter stringFromDate:_datePicker.date];' –

+0

IBAction裏面我創建了一個處理日期選取器的「Value Changed」事件 –

+1

您是否在設置單元格的值之後重新載入表格? – mayuur

回答

1

看起來好像你試圖直接修改當前顯示的表格視圖單元格。即使您設法以這種方式進行更改,這仍然不起作用,因爲當您的行在視圖外滾動時,其相應的單元格將被重新用於另一行。因此,您的更改將丟失,否則您將顯示錯誤的內容。

管理這個正確的方法是:

  1. 更改您的數據源,而不是細胞,當值從日期選取器
  2. 刷新通過重新載入細胞的觀點挑
    • 使用-[UITableView reloadData],或
    • 整個表視圖僅僅是行使用-[UITableView reloadRowsAtIndexPaths:withRowAnimation:]

使用這些方法中的任何一種都會導致表視圖數據源的-tableView:cellForRowAtIndexPath:被調用,這將更新具有新單元格的行。因此,即使滾動出視圖,該行也會顯示正確的日期。