重新排序旋转的uitableviewcell

时间:2012-12-29 13:24:08

标签: ios uitableview cgaffinetransform

我有一个uitableview,我旋转了180度,但我的细胞旋转了-180度。结果是我从表视图的底部加载我的数据。这非常有效。当我尝试重新排序细胞时问题就出现了。如果我尝试拖动一个单元格,它的移动会被反转并立即跳转到表格视图的顶部/底部,具体取决于我拖动的方向。

最简单的方法是使用带有核心数据的主详细信息模板启动一个新项目。在OIMasterViewConroller.m文件中

CGAffineTransform transform = CGAffineTransformMakeRotation(-3.14159);
self.tableView.transform = transform;

在viewDidLoad方法中,并放置

CGAffineTransform transform = CGAffineTransformMakeRotation(-3.14159);
cell.transform = transform;
在configureCell方法中

。最后,更改canMoveRowAtIndexPath以返回YES并实现空白

-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {

}

运行项目并使用+按钮向tableview添加一些项目。然后单击编辑按钮并尝试重新排序。

我认为问题在于细胞,因为去除细胞上的旋转会阻止这种奇怪的行为,即使表是颠倒的。

我想过只是旋转单元格内的文本,但是删除按钮是颠倒的,也是错误的。

1 个答案:

答案 0 :(得分:4)

所以,我最终继承了tableview和表视图中使用的单元格。以下是我所做的一些事情:

在tableview子类中,我重载了layoutsubviews:

- (void)layoutSubviews
{
    [super layoutSubviews];

    for (UIView *subview in self.subviews) {
        if ([NSStringFromClass([subview class]) isEqualToString:@"UIShadowView"]) {
            subview.hidden = YES;
        }
    }
}

这会删除投影。如果不这样,当重新排序时,阴影会显示在tableviewcells的顶部。

对于tableviewcell子类,我改变了它的layoutSubviews:

- (void)layoutSubviews
{
    [super layoutSubviews];

      for (UIView *subview in self.subviews) {        
        if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) {
            CGRect newFrame = subview.frame;
            newFrame.origin.x = 0;
            subview.frame = newFrame;
            subview.transform = CGAffineTransformMakeRotation(-M_PI);
        }
        else if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellEditControl"]) {
            CGRect newFrame = subview.frame;
            newFrame.origin.x = 320-newFrame.size.width;
            subview.frame = newFrame;
            subview.transform = CGAffineTransformMakeRotation(-M_PI);
        }
        else if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellReorderControl"]) {
            CGRect newFrame = subview.frame;
            newFrame.origin.x = 0;
            subview.frame = newFrame;
        }else if([NSStringFromClass([subview class]) isEqualToString:@"UIButton"]) {
            CGRect newFrame = subview.frame;
            newFrame.origin.x = 0;
            subview.frame = newFrame;
            subview.transform = CGAffineTransformMakeRotation(-M_PI);
        }else{
            subview.transform = CGAffineTransformMakeRotation(-M_PI);
        }
    }  
}

这会旋转并移动所有删除按钮/指示符等。需要注意的重要一点是我们不要旋转UITableViewCellReorderControll。旋转此子视图是导致重新排序混乱的原因。