2010-02-08 73 views
2

我有一個複雜的內容UITableView。用戶可以用標準方式點擊編輯按鈕來編輯(重新排列和刪除)單元格。但我希望單元格在「編輯」模式下看起來不同。當用戶點擊編輯按鈕時,重做UITableView佈局?

問:

如何改變UITableView的佈局在編輯模式下,包括更改行高?

到目前爲止,這是我所:

編輯按鈕發送WillTransitionToState/DidTransitionToState消息發送到每個UITableViewCell的(UITVC)。我已經對UITVC進行了分類,並對每個單元格內的這些內容做出反應,根據需要隱藏,刪除和重新洗牌。但是,更改行高不在一個單元格的範圍內。

當用戶點擊編輯時,似乎沒有發送到UITableView的消息。有一個 - tableView:commitEditingStyle:forRowAtIndexPath:編輯特定行後發送到數據源。

裏面heightForRowAtIndexPath,我可以使用tableView.editing屬性查詢當前模式,並適當報告高度。我可以通過調用[tableView reloadData]來觸發表重新流動,包括重新計算高度。但是,我什麼時候打電話?

我可以將信息從WillTransitionToState中的單元發送回「擁有」表視圖,並在我獲取它們時調用reloadData。但這聽起來很脆弱,必須有更好的辦法。

回答

3

如果希望表格單元格根據表格是否處於編輯模式而改變其格式,可以在您的UITableViewController中覆蓋-setEditing:animated:並觸發表格視圖的更新(通過-reloadData)編輯狀態。

在您的UITableViewController的-tableView:cellForRowAtIndexPath:方法中,您可以通過查詢表視圖上的editing屬性來檢查表是否處於編輯狀態,然後根據表所處的狀態返回不同的單元類型。

+0

按預期工作。 (BOOL)編輯動畫:(布爾)動畫,但我使用 - (UITableView *)tableView setEditing:(布爾)編輯動畫:(布爾) )動畫,這當然不起作用。因此,請始終在文檔中仔細檢查方法簽名。 :) – Jaanus

+1

reloadData殺死很好的編輯動畫死... –

8

有節奏的是對的。使用reloadData殺死很好的編輯動畫。

這個問題在這個帖子討論: Can you animate a height change on a UITableViewCell when selected?

而不是使用reloadData的,做調用setEditing後如下:動畫。

[tableview setEditing:editing animated:YES]; 
[tableview beginUpdates]; 
[tableview endUpdates]; 
相關問題