我已经将UICollectionViewLayoutAttributes类子类化,并添加了一些自定义属性.
在我的自定义UICollectionViewLayout类中,我重写了静态
+ (Class)layoutAttributesClass 并返回了我的新属性类.
在我的UICollectionViewLayout类中,我重写-(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect并将值设置为自定义属性.
我可以在那里检查属性类,看看是否正确设置了自定义属性.
所以,最后我需要在UICollectionViewCell中检索这些属性,所以我重写了-(void) applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes获取自定义UICollectionViewLayoutAttributes类中的值,YET它们是nil.好像我从来没有设置它们.
所有其他属性都完美运行,包括转换等.很清楚,我做错了什么.请指教.
包括我的自定义类的HeaderFile
@interface UICollectionViewLayoutAttributesWithColor : UICollectionViewLayoutAttributes
@property (strong,nonatomic) UIColor *color;
@end
Run Code Online (Sandbox Code Playgroud)
这是实施.如你所见,没什么特别的
@implementation UICollectionViewLayoutAttributesWithColor
@synthesize color=_color;
@end
Run Code Online (Sandbox Code Playgroud)
The*_*ind 26
你会很高兴知道答案很简单.您只需要覆盖copyWithZone:因为UICollectionViewAttributes实现了NSCopying协议.正在发生的事情是Apple代码正在制作自定义属性对象的副本,但由于您尚未实现copyWithZone,因此您的自定义属性不会被复制到新对象.以下是您需要做的一个示例:
@interface IRTableCollectionViewLayoutAttributes : UICollectionViewLayoutAttributes {
CGRect _textFieldFrame;
}
@property (nonatomic, assign) CGRect textFieldFrame;
@end
Run Code Online (Sandbox Code Playgroud)
和实施:
- (id)copyWithZone:(NSZone *)zone
{
IRTableCollectionViewLayoutAttributes *newAttributes = [super copyWithZone:zone];
newAttributes->_textFieldFrame = _textFieldFrame;
return newAttributes;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3987 次 |
| 最近记录: |