Представление UICollection не перерисовывает кнопки градиента

У меня есть 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

person larrysanchez    schedule 17.11.2012    source источник
comment
Когда я попробовал этот код, у меня не было проблем, но я создал свой массив птиц в viewDidLoad напрямую, а не из загрузки базы данных, поэтому я думаю, что это может быть источником вашей проблемы. Я думаю, вам нужно обновить свой пост, чтобы показать весь метод, в котором вы извлекаете данные из базы данных и помещаете их в birds.   -  person rdelmar    schedule 18.11.2012


Ответы (1)


Возможно, вам придется указать кнопке перерисовать себя через [cell.button setNeedsDisplay].

person chris    schedule 19.11.2012