使用动画效果向右滑动时,将单元格移动到UITableView的底部

时间:2012-08-06 13:56:59

标签: ios ios5 uitableview

我正在尝试在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];
}

因为你可以看到状态是正确的,我正在尝试实现它,但我不知道如何获得动画效果。所以朋友们,我请求通过这些代码帮助我。

此致 兰吉特

2 个答案:

答案 0 :(得分:0)

UITableView管理其单元格的布局。

你可以通过以下方式实现目标:

  1. ...明智地告诉表格视图不是受影响的单元格的动画,创建复制视图层次结构并动画化这些视图,然后在最终状态下显示表格。 - 或 -

  2. ...继承表视图并重新实现其动画逻辑。 - 或 -

  3. ...创建自己的表格视图。

答案 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]; 
}