我有一个UICollectionView,其中填充了单元格,每个单元格都有一个渐变按钮(MKgradientbutton https://github.com/mikekatz/iOS-UI-Utils/tree/master/Classes/Button%20Widgets)。通过按下其他5个按钮之一来“更改”视图,按钮又将按钮的数据加载到一个数组中,该数组为uicollectionview提供数据源。其中一个参数是渐变按钮颜色。但是,在重新加载数据源并执行[self.collectionView reloadData]时,按钮标题和其他参数将会改变,但颜色经常会变为完全错误的颜色。反复重新加载数据将解决这个问题 - 然而,更奇怪的是,按一下按钮似乎可以纠正按钮的颜色!在重新加载数据发生并且所有颜色都正确之前,我在线上有NSLogged数据源数组。我在下面粘贴了一些代码 - 因为应用程序还处于开发的早期阶段,请耐心等待我!
我真的看不到任何代码问题 - 我相信UICollectionView需要'重绘'但我假设[self.CollectionView reloadData]会解决这个问题!
将数据从sqlite db中拉入对象,然后添加到array:
Bird *bird = [[Bird alloc] init];
bird.birdName = [results stringForColumn:@"name"];
bird.buttonColour = [results stringForColumn:@"btncolour"];
[birds addObject:bird];
数组'birds'用于填充UICollectionView:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView2 cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
CollectionViewCell *cell = [collectionView2 dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
Bird *bird = [birds objectAtIndex:(indexPath.row)];
//Check button colour against index path of item
NSLog(@"****INDEX PATH %i",indexPath.section*2 + indexPath.row);
NSLog(@"****colour %@",bird.buttonColour);
[cell.button setTitle:bird.birdName forState:UIControlStateNormal];
[cell.button setTag:[birds indexOfObject:bird]];
if ([bird.buttonColour isEqualToString:@"Green"]) {
[cell.button setButtonColor:[UIColor greenColor]];
}
if ([bird.buttonColour isEqualToString:@"Orange"]) {
[cell.button setButtonColor:[UIColor orangeColor]];
}
if ([bird.buttonColour isEqualToString:@"Red"]) {
[cell.button setButtonColor:[UIColor redColor]];
}
if ([bird.buttonColour isEqualToString:@"Blue"]) {
[cell.button setButtonColor:[UIColor blueColor]];
}
cell.button.titleLabel.numberOfLines = 0;
cell.button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
cell.button.titleLabel.textAlignment = NSTextAlignmentCenter;
return cell; }
collectionViewCell.h(渐变按钮是单元格中唯一的项目):
#import <UIKit/UIKit.h>
#import "MKGradientButton.h"
@interface CollectionViewCell : UICollectionViewCell
@property (nonatomic) IBOutlet MKGradientButton* button;
@end
答案 0 :(得分:0)
您可能需要通过[cell.button setNeedsDisplay]
告诉按钮重绘自己。