我试图创建自定义UICollectionViewCell
,其中包含几个属性,并取决于绘制组件内部单元的属性的值。我使用dequeueReusableCellWithReuseIdentifier
来创建单元格,然后我设置一些属性,并在最后调用layoutIfNeeded
函数,这个函数在我的自定义单元格内被覆盖。重写功能是设置单元格的某些属性,例如BOOL属性设置为YES,刷新单元格后(在集合视图上调用reloadData
)函数layoutIfNeeded
被再次调用。当我尝试阅读我设置为YES的BOOL属性时,我总是得到默认值,这是我第一次拨打reloadData
时的NO。当我第二次拨打reloadData
时,属性设置为YES。任何想法我做错了什么?这里是代码我使用:UICollectionViewCell未正确设置属性
按钮点击我打电话:
[myCollectionView reloadData];
方法cellForItemAtIndexPath
样子:
MyCustomCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"myCustomCell" forIndexPath: indexPath];
cell.device = [collectionArray objectAtIndex:indexPath.row];
[cell layoutIfNeeded];
return cell;
而且里面MyCustomCollectionCell.m
-(void)layoutIfNeeded{
NSLog(@"bool prop: %d",changedStatus);
changedStatus = YES;
}
的layoutIfNeeded
代码BOOL属性在中定义:
@property (nonatomic, assign)BOOL changedStatus;
UPDATE:
我很抱歉,我在我的岗位上做出了一个错误。我不喜欢收集reloadData
,但与reloadItemsAtIndexPaths
;这个调用会导致我的自定义单元格的init方法再次被调用(不仅仅是当收集视图第一次被加载时),并且在那之后调用它的方法layoutIfNeeded
。我的问题是单元格没有被重用,但是再次创建,导致所有属性消失。任何想法如何解决这个问题?
您可以指定在(与调用'-reloadData')你在读'changedStatus'? – 2015-03-13 13:31:39
'reloadData'在'viewController'类中被调用,'changedStatus'被设置并被打印在'MyCustomCollectionCell'里面。首先在'layoutIfNeeded'方法中调用'reloadData',然后调用'cellForItemAtIndexPath'方法,在'layoutIfNeeded'里面调用'changedStatus'方法,然后设置新的值。 – AleksandarNS 2015-03-13 13:36:42
兄弟我刚刚创建了一个空白项目并复制你的代码并粘贴到我的项目中。只是在@implementation之后添加了一行。合成changedStatus。并且工作得很好。不知道为什么,但工作。 – 2015-03-13 13:40:44