在UICollectionViewCell中分配UILabel

时间:2015-03-15 17:30:57

标签: ios objective-c uicollectionviewlayout

我使用集合视图和纵向和横向的不同布局制作应用程序,我为每个单元格分配UIlabel。

我就是这样做的。

UILabel *scheduleCellLabel = [[UILabel alloc] init];
scheduleCellLabel.textAlignment = NSTextAlignmentCenter;
scheduleCellLabel.frame = CGRectMake(0, 0,scheduleCell.bounds.size.width, scheduleCell.bounds.size.height);
[scheduleCell addSubview:scheduleCellLabel];

问题是,每次方向更改时我都会重新加载集合视图,但旧单元格会保留在集合视图中。我尝试在加载时从单元格中删除标签,但这不是问题。

它的外观如下:

enter image description here

提前致谢。

3 个答案:

答案 0 :(得分:2)

在我看来,除非你需要,否则将子视图添加代码放在cellForRowAtIndexPath中是不好的做法;例如,如果某些单元格具有子视图,而某些单元格不基于indexPath。您应该在IB中创建单元格,或者将单元格子类化,并在单元格的init方法中添加任何子视图。这样,您不必在重新添加视图之前删除视图,或者在添加视图之前检查它们是否存在;这只会使你的cellForRowAtIndexPath方法复杂化。

答案 1 :(得分:0)

删除并添加cellForItemAtIndexPath中的标签。首先检查标签是否在单元格中,如果是,则从superview中删除它,然后创建新标签并将其添加到其内容视图中。

答案 2 :(得分:0)

您可能会在cellForRowAtIndexPath方法中分配uilabel,并在重新加载collectionView时反复出现。 要解决您的问题,只需将标签定义为属性并将其分配到viewDidLoad方法中,并在cellForRowAtIndexPath方法中执行您想要的操作。希望这会有所帮助。

例如,这是您的头文件:

@property (retain,nonatomic) IBOutlet UILabel *label;

这是实现文件的viewDidLoad方法:

    _label = [[UILabel alloc] init];