3

180 度回転させたが、セルを -180 度回転させた uitableview があります。その結果、テーブル ビューの下部からデータを読み込んでいます。これはうまくいきます。セルを並べ替えようとすると問題が発生します。セルをドラッグしようとすると、その動きが反転し、ドラッグしていた方向に応じて、すぐにテーブル ビューの上部/下部にジャンプします。

これを確認する最も簡単な方法は、コア データを含むマスター/ディテール テンプレートを使用して新しいプロジェクトを開始することです。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 {

}

プロジェクトを実行し、+ ボタンを使用してテーブルビューにいくつかの項目を追加します。次に、編集ボタンをクリックして、並べ替えを試みます。

テーブルが逆さまであっても、セルの回転を削除するとこの奇妙な動作が停止するため、問題はセルにあると思います。

セル内のテキストを回転させることだけを考えましたが、削除ボタンが上下逆になっていて、反対側にあります。

4

1 に答える 1

4

そのため、テーブルビューとテーブルビューで使用されるセルの両方をサブクラス化することになりました。これが私がしたことのいくつかです:

テーブルビューサブクラスで、layoutsubviewsをオーバーロードします。

- (void)layoutSubviews
{
    [super layoutSubviews];

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

これにより、ドロップシャドウが削除されます。そうしないと、テーブルビューセルが並べ替えられているときに、テーブルビューセルの上部に影が表示されます。

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 に答える