0

並べ替えの図 (3 本の線) を UITableViewCell の左側に表示する必要があります。これは、右側がオーバーレイ UIView によって隠されるためです。

私が見つけたこのコード:

- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    for(UIView* view in cell.subviews)
    {
        if([[[view class] description] isEqualToString:@"UITableViewCellReorderControl"])
        {
            // Creates a new subview the size of the entire cell
            UIView *movedReorderControl = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetMaxX(view.frame), CGRectGetMaxY(view.frame))];
            // Adds the reorder control view to our new subview
            [movedReorderControl addSubview:view];
            // Adds our new subview to the cell
            [cell addSubview:movedReorderControl];
            // CGStuff to move it to the left
            CGSize moveLeft = CGSizeMake(movedReorderControl.frame.size.width - view.frame.size.width, movedReorderControl.frame.size.height - view.frame.size.height);
            CGAffineTransform transform = CGAffineTransformIdentity;
            transform = CGAffineTransformTranslate(transform, -moveLeft.width, -moveLeft.height);
            // Performs the transform
            [movedReorderControl setTransform:transform];
        }
    }
}

テーブルが初めてロードされるときは問題なく動作します。ただし、セルが「再描画」されると(前後にスクロールするときなど)、並べ替え記号は消えます。

何がうまくいかないのですか?

4

2 に答える 2

1

現在の位置に対して並べ替えコントロールを移動し続ける

CGSize moveLeft = CGSizeMake(movedReorderControl.frame.size.width - view.frame.size.width, movedReorderControl.frame.size.height - view.frame.size.height);

そのため、画面外に移動しているようです。初期フレームを保存してから、それを使用してサブビューをシフトしてみてください。

CGSize moveLeft = CGSizeMake(initialFrame.width - view.frame.size.width, initialFrame.width.height - view.frame.size.height);
于 2013-03-07T02:15:28.067 に答える
0

drawRect:セルが更新されるたびに呼び出されるように、コードは UITableView セルのメソッドに入れる必要があります。ビューではなく、それ自体を描画するのはセルの責任であるべきです。

于 2013-03-07T00:48:30.250 に答える