真正复制UITableViewCell

时间:2013-06-07 08:33:32

标签: ios tableview reuseidentifier

我正试图拖延从tableView中删除customCell。我正在使用UIImageView获取customCell的图像,然后将其拖动到视图周围,但问题是我无法获取customCell的图像。

CustomCellClass *customCell = [[CustomCellClass alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[CustomCellClass identifier]];

customCell.textLabel.text = "Dragging cell";
_draggedImageView.image = customCell.imageRepresentation;

但是这不起作用,它没有得到任何图像。

我也尝试过:

 CustomCellClass *customCell = [tableView dequeueReusableCellWithIdentifier:[CustomCellClass identifier] forIndexPath:0];

customCell.textLabel.text = "Dragging cell";
_draggedImageView.image = customCell.imageRepresentation;

这有效,但有一个问题。由于我正在更改重用的customCell的文本,因此它也会在tableView中更改。我需要一个customCell的副本,所以我可以拥有正确的布局,在副本中更改我想要的内容(在本例中是单元格的textLabel)并添加imageView以进行拖动,并将其与tableView的任何customCell分开。

任何想法如何实现这一目标?

谢谢大家。

2 个答案:

答案 0 :(得分:0)

我不知道UIKit中-imageRepresentation的存在。通常,要从后备存储创建映像,您应该创建位图上下文,在该上下文中呈现视图,最后获取图像表示。您可以创建一个类别:

#import "UIView+RenderVIew.h"
#import <QuartzCore/QuartzCore.h>

@implementation UIView (RenderView)

- (UIImage *) imageByRenderingViewOpaque:(BOOL) yesOrNO {
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, yesOrNO, 0);
    [self.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return resultingImage;
}
- (UIImage *) imageByRenderingView{
    return [self imageByRenderingViewOpaque:NO];
}

@end

答案 1 :(得分:0)

我是通过创建UIView Category,向其添加方法,以及当您想要任何类型的视图(CustomCell)的图像时调用此函数来完成的。它将返回一个该特定观点的形象。

@implementation UIView (UIViewCategory)

- (UIImage*)convertInImage {

    UIGraphicsBeginImageContext(self.bounds.size);
    [self.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}
@end
  

使用方法:

UIImage *cellImage = [yourCustomCellObj convertInImage];
  

这是我的工作,希望它能解决你的问题。