簡體   English   中英

以編程方式將UITableView行從一個位置移動到另一個位置

[英]Programmatically move/animate a UITableView row from one position to another

我有一個UITableView,我想以編程方式將一行從位置N1移動到位置N2,我希望它從舊位置動畫到新位置。 我查看了UITableView文檔,我只看到插入,重新加載和刪除。 你知道我可以通過編程方式做到這一點嗎?

幾個筆記:

  • 我知道我可以從位置N1動畫刪除動畫並同時將插入動畫設置到位置N2。 這是我的后備,但我希望用戶明白它真的從N1轉移到N2。

  • 我不是在談論允許用戶將它從一個地方拖到另一個地方。 我知道如何做到這一點,我正在尋找一種方法來以編程方式啟動和動畫移動。

我過去曾經處理過類似的事情,解決方案並不漂亮,但確實有效。

基本上你必須做一些數學來計算屏幕上行的位置。 然后根據UITableViewcontentOffsety屬性調整它。

你可以這樣做:

[myView convertPoint:localPosition toView:nil];

然后你將構造一個與你的視圖相同的新UIView 將其框架設置為您正在嘗試移動的UITableViewCell頂部。 將其添加為應用主UIWindow的子視圖。

所有這一切都要在你的UITableView上設置userInteractionEnabled或者scrollEnabledNO ,這樣用戶就不會在整個過程中scrollEnabled事物的位置(只要記住在一切都完成scrollEnabled其設置回YES動畫)。

然后將其設置為新位置然而最有意義。

我知道您可能需要在所有這些過程中滾動UITableView ,這會使事情變得相當復雜,但您也可以為滾動設置動畫。

當然,你必須做你的動畫如果它是必要的,你的應用程序的行類似的操作。

就像我說它不容易或漂亮。 但是我確實理解你要完成的任務,我認為當它正確拉出時效果非常棒。

如果有人更好地了解如何在不瘋狂的情況下解決這個問題我很想知道,但這種類型的實施是我能做的最好的。

[table beginUpdates];
[table moveRowAtIndexPath:indexPath toIndexPath:destIndexPath];
[table endUpdates];

如果您使用的是iOS 5或hight,則可以使用以下方法:

- (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath

例如:

//move last cell one row up.
NSIndexPath *oldPath = [NSIndexPath indexPathForRow:[items count] - 1 inSection:0];
NSIndexPath *newPath = [NSIndexPath indexPathForRow:[items count] - 2 inSection:0];
[[self tableView] moveRowAtIndexPath:oldPath toIndexPath:newPath];

在這里查看蘋果的文檔。

我想你最好的后備確實是刪除和插入方法,如:

[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:oldPath] withRowAnimation:UITableViewRowAnimationLeft];
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newNewPath] withRowAnimation:UITableViewRowAnimationLeft];
[tableView endUpdates];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM