我正在尝试在UITableviewCells上实现滑动手势,因此当用户向右滑动时,我希望单元格移动到具有动画效果的表格底部(就像iphone中的CLEAR应用程序 )。我已经引用了这个链接http://www.cocoacontrols.com/platforms/ios/controls/jtgesturebasedtableviewdemo,并尝试实现它。下面是我的代码,到目前为止,当状态是“正确的”
- (void)gestureRecognizer:(JTTableViewGestureRecognizer *)gestureRecognizer commitEditingState:(JTTableViewCellEditingState)state forRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableView *tableView = gestureRecognizer.tableView;
[tableView beginUpdates];
if (state == JTTableViewCellEditingStateLeft)
{
// An example to discard the cell at JTTableViewCellEditingStateLeft
[self.rows removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
}
else if (state == JTTableViewCellEditingStateRight)
{
***NSString *selectedString = [self.rows objectAtIndex:indexPath.row];
[self.rows removeObjectAtIndex:indexPath.row];
//[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
// withRowAnimation:UITableViewRowAnimationLeft];
NSIndexPath *selectedIndexPath = [tableView indexPathForSelectedRow];
[tableView moveRowAtIndexPath:selectedIndexPath toIndexPath:[NSIndexPath indexPathForRow:[self.rows count]-1 inSection:0]];
[self.rows insertObject:selectedString atIndex:[self.rows count]];
[tableView insertRowsAtIndexPaths:[NSArray
arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]]
withRowAnimation:UITableViewRowAnimationBottom];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];***
}
[tableView endUpdates];
// Row color needs update after datasource changes, reload it.
[tableView performSelector:@selector(reloadVisibleRowsExceptIndexPath:) withObject:indexPath afterDelay:JTTableViewRowAnimationDuration];
}
因为你可以看到状态是正确的,我正在尝试实现它,但我不知道如何获得动画效果。所以朋友们,我请求通过这些代码帮助我。
此致 兰吉特
答案 0 :(得分:0)
UITableView
管理其单元格的布局。
你可以通过以下方式实现目标:
...明智地告诉表格视图不是受影响的单元格的动画,创建复制视图层次结构并动画化这些视图,然后在最终状态下显示表格。 - 或 -
...继承表视图并重新实现其动画逻辑。 - 或 -
...创建自己的表格视图。
答案 1 :(得分:0)
我研究了这个问题并且提供了这个解决方案,现在当我向右滑动单元格并且单元格移动到底部时,我得到了效果,但是我的单元格没有更新,每当我向右滑动单元格时,它需要紧靠其位置的单元格的字符串。无法理解我缺少的东西
- (void)gestureRecognizer:(JTTableViewGestureRecognizer *)gestureRecognizer commitEditingState:(JTTableViewCellEditingState)state forRowAtIndexPath:(NSIndexPath *)indexPath {
UITableView *tableView = gestureRecognizer.tableView;
[tableView beginUpdates];
if (state == JTTableViewCellEditingStateRight)
{
NSIndexPath *selectedIndexPath = [tableView indexPathForSelectedRow];
[tableView moveRowAtIndexPath:selectedIndexPath toIndexPath:[NSIndexPath indexPathForRow:[self.rows count]-1 inSection:0]];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
}
[tableView endUpdates];
// Row color needs update after datasource changes, reload it.
[tableView performSelector:@selector(reloadVisibleRowsExceptIndexPath:) withObject:indexPath afterDelay:JTTableViewRowAnimationDuration];
}
-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
NSString *selectedString = [self.rows objectAtIndex:sourceIndexPath.row];
[self.rows removeObjectAtIndex:sourceIndexPath.row];
[self.rows insertObject:selectedString atIndex:[self.rows count]-1];
}