我正在製作具有自定義單元格的UICollectionView
,並且發生了一件非常奇怪的事情。所有indexPath.row
的數字爲ODD的單元格留空,我無法對它們執行任何繪製。UICollectionView奇數單元格留空
我使用故事板在我自己的UIViewController
中創建了一個UICollectionView
對象。 UICollectionView
的單元格被設置爲我自定義的UICollectionViewCell
sublcass,名爲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
方法popu用啞元數據描述一個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);
}
謝謝!
你可以發佈代碼爲'[cell createViewWithDay:indexPath.row isToday:YES withSize:cell.frame.size];' – Alex