gpt4 book ai didi

ios - 在 UITableViewCell 和 UICollectionViewCell 之间共享代码

转载 作者:行者123 更新时间:2023-12-01 18:23:17 25 4
gpt4 key购买 nike

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

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

我听说过组合模式,但我很难将其用于这种情况。使用的模式是否正确?

注意:我必须同时保留 UITableView 和 UICollectionView,因此删除 UITableView 不是解决方案。

最佳答案

我认为,您可以在它们的共同祖先 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

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

关于ios - 在 UITableViewCell 和 UICollectionViewCell 之间共享代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15758787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com