2011-04-14 69 views
1

我使用的內和跨段拖放行我可以用table來拖動tableview中的部分嗎?

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath 
    toIndexPath:(NSIndexPath *)destinationIndexPath{ 
} 

方法。我是否也可以用節來執行拖動操作?

+0

你有這樣的特殊需求嗎? – Ravin 2011-04-14 12:57:13

+0

是的,我願意..這會讓我的應用用戶的生活變得更輕鬆.. – neha 2011-04-14 14:22:52

回答

2

它可能在概念上(以及在技術上)更簡單地將級別退回到表視圖,其中每行對應於要重新排序的表的部分。也許你可以使用「重新排序部分」按鈕來調用它,顯示部分表視圖,重新排序,然後在細節表視圖上強加重新排序。 我認爲如果您嘗試在單個表格內完成所有操作,那麼您將會挫敗自己和用戶。我的2美分。 -Mike

1

老問題,我知道,但我只是實現了一些自己做的事情,所以我想分享答案,以防止其他人偶然發現這一點。

我的基本方法是在每個部分的頂部添加一行代表部分。我還在每節的末尾添加了編輯樣式爲UITableViewCellEditingStyleInsert的「添加新節」行,以允許直接在視圖內創建新節。所以,對於每一個部分的行是這樣的:

  • 行0 =第行(在視覺上通過設置不同的 背景顏色分辨)
  • 排數1至x =正常數據行
  • 排x + 1 = 「新增加一節」

(我有幾個簡單的方法,以「編輯模式indexPath」和「真實數據indexPath」之間的轉換。)

對於移動部分,在p在UITableViewDelegate Protocol方法tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:中檢查刪除的移動以確保該部分行移動得「足夠遠」(在另一部分行的上方或下方)。返回的indexPath被剪切到剛好在最接近的部分行的上方或下方(取決於向上還是向下移動),以向用戶指示它將被移動的位置。

tableView:moveRowAtIndexPath:toIndexPath:段更改在數據源中,然後reloadData消息發送到tableView以顯示更改。使用reloadData而不是moveSection:toSection:,因爲對於後者,由於行移動而導致數據源和顯示不同步,並且會導致異常。

相關問題