2011-06-24 30 views
2

我有一個UITableView的單元格,當選擇時將viewControllers推入堆棧。子ViewController獲取用戶輸入,然後彈出堆棧。爲什麼我不能在viewWillAppear中調用reloadData並取消選擇RowAtIndexPath:同時動畫?

當子viewController彈出時,我希望父級的TableView更新所選單元格的值,然後取消選擇該行。我可以使用reloadData更新單元格,並且我可以使用deselectRowAtIndexPath取消選擇該行 - 但我不能同時做兩個

我明白爲什麼這是 - reloadData隱式地取消選擇單元格,deselectRowAtIndexPath會明確地取消選擇它,但我發現好奇的是我找不到任何想要實現相同的重新加載/取消選擇行爲的人。我在這裏錯過了什麼?

所有的代碼都在viewWillAppear:animated - 如果我把view中的deselectRowAtIndexPath放在viewWillAppear中,並在viewDidAppear中重載數據,我可以關閉,但這不是我想要的。

回答

8

重新加載單元格時,會自動取消選擇。這是因爲您沒有在tableView:cellForRowAtIndexPath:中將單元的selected屬性設置爲YES。所以你將不得不以不同的方式處理。要麼確定indexPath處的單元格需要爲selected,並在tableView:cellForRowAtIndexPath:中正確設置其selected屬性爲YES,或者在重新加載數據後將其選中。在這種情況下,您可以執行以下方法 -

[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
         withRowAnimation:UITableViewRowAnimationNone]; 

[self.tableView selectRowAtIndexPath:indexPath 
          animated:NO 
         scrollPosition:UITableViewScrollPositionNone]; 

[self.tableView deselectRowAtIndexPath:indexPath animated:YES]; 

的步驟的順序是: -

  1. 刷新該行沒有任何動畫。
  2. 選擇沒有動畫的行。
  3. 取消選擇包含動畫的行。

這樣我想你可以得到你想要的效果。

+0

謝謝迪帕克,工作完美。我問了兩分鐘後回答。 Stackoverflow規則! :) –

0

當用戶第一次點擊該行以加載可編輯視圖控制器時,在加載可編輯ViewController之前取消選擇UITableViewCell。

相關問題