3

我有一个 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 添加一些项目。然后单击编辑按钮并尝试重新排序。

我相信问题出在单元格上,因为移除单元格上的旋转将停止这种奇怪的行为,即使桌子是倒置的。

我想只是旋转单元格内的文本,但是删除按钮是颠倒的,以及在错误的一侧。

4

1 回答 1

4

所以,我最终将表格视图和表格视图中使用的单元格子类化了。以下是我所做的一些事情:

在 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。旋转这个子视图是导致重新排序混乱的原因。

于 2013-02-14T19:15:06.420 回答