在UITableViewCell中左侧有重新排序符号

时间:2013-03-07 00:35:45

标签: ios uitableview

我希望重新排序的图形(三行)显示在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];
        }
    }
}

第一次加载表时工作正常。 但是,当细胞被“重新绘制”时(比如前后滚动),重新排序的符号就会消失。

出了什么问题?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

代码应该放在UITableView单元格的drawRect:方法中,以便在更新单元格时调用它。它应该是细胞自己绘制的责任,而不是视图。