У меня есть UICollectionView, который заполнен ячейками, и каждая ячейка имеет кнопку градиента (MKgradientbutton https://github.com/mikekatz/iOS-UI-Utils/tree/master/Classes/Button%20Widgets). Представление «изменяется» нажатием одной из 5 других кнопок, которая, в свою очередь, загружает данные для кнопок в массив, который предоставляет источник данных для uicollectionview. Один из параметров - цвет кнопки градиента. Однако при перезагрузке источника данных и выполнении [self.collectionView reloadData] заголовок кнопок и другие параметры изменятся, но цвет довольно часто меняется на совершенно неправильный. Многократная перезагрузка данных решит эту проблему - однако, что еще более странно, кажется, что одно нажатие кнопки исправляет ее цвет! Я NSLogged массив источника данных в строке до того, как reloadData имеет место, и все цвета правильные. Я вставил код ниже - пожалуйста, будьте терпеливы, поскольку приложение все еще находится на очень ранней стадии разработки!
Я действительно не вижу никаких проблем с кодом - и я считаю, что UICollectionView нужно «перерисовать», но я предполагал, что [self.CollectionView reloadData] решит это!
Вытягивание данных из sqlite db в объект и затем добавление в массив:
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