我认为,您可以在它们共同的祖先 UIView 上使用类别。您只能共享常用方法,不能共享实例变量。
让我们看看如何使用它。
例如,您有自定义 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 创建类别。
@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
现在在单元实现文件中导入类别标题并删除方法实现。从那里您可以使用类别中的常用方法。您唯一需要复制的是属性声明。