セルが取り込まれた UICollectionView があり、各セルにはグラデーション ボタンがあります (MKgradientbutton https://github.com/mikekatz/iOS-UI-Utils/tree/master/Classes/Button%20Widgets)。ビューは、5 つの他のボタンのいずれかを押すことによって「変更」されます。これにより、ボタンのデータが、uicollectionview のデータソースを提供する配列にロードされます。パラメータの 1 つはグラデーション ボタンの色です。ただし、データソースをリロードして [self.collectionView reloadData] を実行すると、ボタンのタイトルとその他のパラメーターが変更されますが、色が完全に間違ったものに変更されることがよくあります。データを繰り返し再ロードするとこの問題は解決しますが、さらに奇妙なことに、ボタンを 1 回押すだけでボタンの色が修正されるようです。reloadData が実行される前に行のデータソース配列を NSLogged しましたが、すべての色が正しいです。以下にいくつかのコードを貼り付けました。アプリはまだ開発の初期段階にあるため、ご容赦ください。
コードに問題は見当たりません。UICollectionView には「再描画」が必要だと思いますが、[self.CollectionView reloadData] で解決できると思います。
sqlite db からオブジェクトにデータをプルしてから、配列に追加します。
Bird *bird = [[Bird alloc] init];
bird.birdName = [results stringForColumn:@"name"];
bird.buttonColour = [results stringForColumn:@"btncolour"];
[birds addObject:bird];
UICollectionView の設定に使用されている配列「birds」:
- (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