我有一个单元格,其中我在顶部有两个标签,然后是中间的视图和底部的两个标签,它是一个图形。我已经对项目数量进行了硬编码,因为我只需要10-13个值,显然一切都很好,值正在更新,并且子视图被添加到cellForRowAt委托方法中但滚动时标签的值显示为空白,并且这种行为是非常不正常的,因为滚动时如果第二和第三个索引变为空白,那么在进一步滚动时它们会返回并且第7个第5个变为空白,因为没有服务调用所以我没有调用重载数据。这绝对让我发疯,我知道它与细胞被重复使用时有关,但我不知道为什么或者我做错了什么,因为最初价值看起来很好。
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
TraingingGraphCollectionViewCell *cell = (TraingingGraphCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:[NSString stringWithFormat:@"TraingingGraphCollectionViewCell"] forIndexPath:indexPath];
if (indexPath.row == 0 || indexPath.row == 12) {
[cell initEmptyCell];
} else {
[cell initCellWithMaximumWeight:100 completedWeight:10*(int)indexPath.row maxRepititions:10 completedRepititions:(int)indexPath.row];
}
return cell;
}
以下是委托方法中调用的方法。 `
-(void) initEmptyCell {
// [self setNeedsDisplay];
// back ground colour
self.backgroundColor = UIColorFromRGB(COLOUR_232323);
//hiding the labels
[self.completedWeightLabel setHidden:YES];
[self.completedRepititonsLabel setHidden:YES];
[self.dateLabel setHidden:YES];
[self.setLabel setHidden:YES];
}
这是下面给出的第二种方法
-(void) initCellWithMaximumWeight:(float)maxWeight
completedWeight:(float)completedWeight
maxRepititions:(int)maxRepititions
completedRepititions:(int)completedRepititions {
//reloading the content
//[self setNeedsDisplay];
// back ground colour
self.backgroundColor = UIColorFromRGB(COLOUR_232323);
// adding the weight bar
float weightPercentage = completedWeight / maxWeight;
if (weightPercentage > 1) {
weightPercentage = 1;
}
UIView *weightView = [[UIView alloc] initWithFrame:CGRectMake(20.0, self.graphView.frame.size.height - (self.graphView.frame.size.height * weightPercentage), 10.0, self.graphView.frame.size.height * weightPercentage)];
[weightView setBackgroundColor:UIColorFromRGB(COLOUR_E9280E)];
[self.graphView addSubview:weightView];
// adding the repititions bar
float repsPercentage = (float)completedRepititions / (float)maxRepititions;
if (repsPercentage > 1) {
repsPercentage = 1;
}
UIView *repsView = [[UIView alloc] initWithFrame:CGRectMake(35.0, self.graphView.frame.size.height - (self.graphView.frame.size.height * repsPercentage), 10.0, self.graphView.frame.size.height * repsPercentage)];
[repsView setBackgroundColor:UIColorFromRGB(COLOUR_97F619)];
[self.graphView addSubview:repsView];
//bottom view
[self.dateLabel setAttributedText:[NSString stringWithFormat:@"%@", [Utilities convertDateToString:[NSDate date] usingFormat:dd__MM_DATE_FORMAT forCulture:@"nl_NL"]] withFont:FontUsingMacro(LATO_BOLD_FONT_STRING, 12.0) kerining:1.3 color:UIColorFromRGB(COLOUR_FFFFFF)];
[self.setLabel setAttributedText:[NSString stringWithFormat:@"Set 01"] withFont:FontUsingMacro(LATO_BOLD_FONT_STRING, 12.0) kerining:1.3 color:UIColorFromRGB(COLOUR_808080)];
//top view
[self.completedWeightLabel setAttributedText:[NSString stringWithFormat:@"%.1f KG", completedWeight] withFont:FontUsingMacro(LATO_REGULAR_FONT_STRING, 12.0) kerining:1.3 color:UIColorFromRGB(COLOUR_E9280E)];
[self.completedRepititonsLabel setAttributedText:[NSString stringWithFormat:@"%d Reps", completedRepititions] withFont:FontUsingMacro(LATO_REGULAR_FONT_STRING, 12.0) kerining:1.3 color:UIColorFromRGB(COLOUR_97F619)];
}
答案 0 :(得分:1)
staticfiles
也会被调用。所以说索引0处的单元格的值为A.然后滚动,0处的单元格离开屏幕。索引8处的单元格显示为值B.当您向后滚动以查看索引0处的单元格时,表格视图可能会重复使用索引8处的单元格。现在索引0处的单元格将显示B(如果您未将其设置回正确值)索引0处数据的值。遵循?
当您在cellForItem
中发表声明时,通常会发生这种情况:
cellForItem
然后你不编码else条件。
所以请确保你这样做:
if foo {
cell.textLabel.text = "isFoo"
}
<强>更新强>
现在我看到了你的代码,这正是你所做的。您可以在if语句中设置隐藏的标签,而不要在else语句中取消隐藏它们。
答案 1 :(得分:1)
在 initCellWithMaximumWeight 方法中包含以下代码。
[self.completedWeightLabel setHidden:NO];
[self.completedRepititonsLabel setHidden:NO];
[self.dateLabel setHidden:NO];
[self.setLabel setHidden:NO];