在UITableViewCell和UICollectionViewCell之间共享代码

我有一个相当大的UITableViewCell子类,它处理各种手势和统计行为。 我也build立一个UICollectionView,我的UICollectionViewCell子类的行为是非常接近我的UITableViewCell。 我已经粘贴了很多代码。

我的问题是:是否有一个devise模式,可以让我有这两个子类之间共享的UI代码(手势和状态)?

我听说过构图模式,但我很难适应这种情况。 这是正确的使用模式吗?

注意:我必须保持UITableView和UICollectionView,所以放弃UITableView不是一个解决scheme。

我想,你可以在他们共同的祖先UIView上使用类别。 你只能共享通用的方法,而不是实例variables。

让我们看看如何使用它。

例如你有自定义的UITableViewCell

@interface PersonTableCell: UITableViewCell @property (nonatomic, weak) IBOutlet UILabel *personNameLabel; - (void)configureWithPersonName:(NSString *)personName; @end @implementation PersonTableCell - (void)configureWithPersonName:(NSString *)personName { self.personNameLabel.text = personName; } @end 

和UICollectionViewCell

 @interface PersonCollectionCell: UICollectionViewCell @property (nonatomic, weak) IBOutlet UILabel *personNameLabel; - (void)configureWithPersonName:(NSString *)personName; @end @implementation PersonCollectionCell - (void)configureWithPersonName:(NSString *)personName { self.personNameLabel.text = personName; } @end 

两个共享方法configureWithPersonName:给它们的祖先UIView让我们创build类。

 @interface UIView (PersonCellCommon) @property (nonatomic, weak) IBOutlet UILabel *personNameLabel; - (void)configureWithPersonName:(NSString *)personName; @end @implementation UIView (PersonCellCommon) @dynamic personNameLabel; // tell compiler to trust we have getter/setter somewhere - (void)configureWithPersonName:(NSString *)personName { self.personNameLabel.text = personName; } @end 

现在在单元实现文件中导入类别标题并删除方法实现。 从那里你可以使用类别的常用方法。 唯一需要复制的是属性声明。