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