我正在UICollectionView
使用自定义单元格制作一个,并且发生了一件非常奇怪的事情。indexPath.row
'''是奇数的所有单元格都留空,我无法对它们进行任何绘图。
UICollectionView
我自己UIViewController
使用Storyboard创建了一个对象。的UICollectionView
单元格设置为我的自定义UICollectionViewCell
子类,名为CustomCell。每个单元格占据整个宽度和高度UICollectionView
。CustomCell 中的所有内容都是以编程方式创建的,而不是使用 Storyboard。这是我的cellForItemAtIndexPath
代码:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
CustomCell *cell = (CustomCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
//createViewWithDay is used to populate the contents of the cell
[cell createViewWithDay:indexPath.row isToday:YES withSize:cell.frame.size];
NSInteger x = indexPath.row;
NSLog(@"Path: %i", x);
return cell;
}
每个CustomCell创建一个自定义视图(名为CustomView),并将其添加为子视图。现在,CustomView 所做的只是绘制一个 X 轴和一个 Y 轴。
奇怪的是,cellForItemAtIndexPath
每个单元格都正确触发。也就是说,它对偶数和奇数索引都调用。与委托方法相同didSelectItemAtIndexPath
。每个CustomView的绘图不会根据单元格的索引而更改。事实上,根据索引,根本没有任何变化。这是我运行应用程序时出现的示例。
.
在第一张图片中,绘制轴的单元格位于 处indexPath.row == 14
,而黑色单元格位于 处indexPath.row == 15
。在第二张图片中,索引 15 位于左侧,索引 16 位于右侧。
有谁知道为什么会发生这种情况?奇数/偶数索引可能无关紧要,但这就是正在发生的事情。
编辑:一些额外的代码..这是createViewWithDay
在方法中调用的cellForItemAtIndex
:
- (void)createViewWithDay:(float)day isToday:(BOOL)today withSize:(CGSize)size
{
CustomView *newView = [[CustomView alloc] initWithFrame:self.frame];
[newView viewForDay:day overDays:6 withDetail:20 today:YES withSize:size];
[newView setBackgroundColor:[UIColor whiteColor]];
[self addSubview:newView];
}
这是viewForDay
- (void)viewForDay:(NSInteger)primaryDay overDays:(NSInteger)days withDetail:(NSInteger)detail today:(BOOL)today withSize:(CGSize)size
{
_graphPrimaryDay = primaryDay;
_numberOfDays = days;
_lineDetail = detail;
_isToday = today;
_viewSize = self.frame.size;
_pointsPerDay = (float)(_lineDetail / _numberOfDays);
_isReadyToDraw = YES;
[self createGraphDays];
}
此viewForDay
方法只是分配一些CustomView实例变量,而该createGraphDays
方法使用虚拟数据填充 NSMutableArray。
我想我还应该添加CustomView的drawRect
方法,所以在这里..
- (void)drawRect:(CGRect)rect
{
if(_isReadyToDraw)
{
[self drawGraph];
}
}
这是drawGraph
..
- (void)drawGraph
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextMoveToPoint(context, 0, _viewSize.height / 2);
CGContextAddLineToPoint(context, _viewSize.width, _viewSize.height / 2);
if(_isToday)
{
CGContextMoveToPoint(context, _viewSize.width / 2, 0);
CGContextAddLineToPoint(context, _viewSize.width / 2, _viewSize.height);
}
CGContextSetLineWidth(context, 2.5);
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
CGContextStrokePath(context);
}
谢谢!