gpt4 book ai didi

iphone - UICollectionViewLayoutAttributes 子类在自定义属性中返回 nil

转载 作者:技术小花猫 更新时间:2023-10-29 10:43:17 32 4
gpt4 key购买 nike

我已将 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/

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