我已将 UICollectionViewLayoutAttributes 类子类化并添加了一些自定义属性。
在我的自定义 UICollectionViewLayout 类中,我覆盖了静态
+ (Class)layoutAttributesClass 并返回我的新属性类。
在我的 UICollectionViewLayout 类中,我覆盖了 -(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect 并将值设置为自定义属性。
我可以在那里检查属性类并查看自定义属性是否设置正确。
因此,最后我需要在 UICollectionViewCell 中检索这些属性,所以我覆盖了 -(void) applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes 以获取自定义 UICollectionViewLayoutAttributes 类中的值,但它们是零。好像我从未设置过它们。
所有其他属性都运行良好,包括转换等。很明显,我做错了什么。请指教。
包括我的自定义类的 HeaderFile
@interface UICollectionViewLayoutAttributesWithColor : UICollectionViewLayoutAttributes
@property (strong,nonatomic) UIColor *color;
@end
这是实现。如您所见,没什么特别的
@implementation UICollectionViewLayoutAttributesWithColor
@synthesize color=_color;
@end
最佳答案
您会很高兴知道答案很简单。您只需要重写 copyWithZone: 因为 UICollectionViewAttributes 实现了 NSCopying 协议(protocol)。发生的事情是 Apple 代码正在复制您的自定义属性对象,但是因为您还没有实现 copyWithZone,所以您的自定义属性没有被复制到新对象。以下是您需要执行的操作的示例:
@interface IRTableCollectionViewLayoutAttributes : UICollectionViewLayoutAttributes {
CGRect _textFieldFrame;
}
@property (nonatomic, assign) CGRect textFieldFrame;
@end
和实现:
- (id)copyWithZone:(NSZone *)zone
{
IRTableCollectionViewLayoutAttributes *newAttributes = [super copyWithZone:zone];
newAttributes->_textFieldFrame = _textFieldFrame;
return newAttributes;
}
关于iphone - UICollectionViewLayoutAttributes 子类在自定义属性中返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12738824/