重新加载集合视图

时间:2013-02-03 18:40:04

标签: ios objective-c nsmutablearray uicollectionview custom-cell

我正在Objective C中编写一个应用程序。我在集合视图中有自定义单元格。最初,它从SQLite Db加载数据,并在每个自定义单元格的Collection视图中显示它。它在集合视图中显示单元格。

一旦我重新加载集合视图,集合视图就会保持黑色。

代码:

-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return 3;
}

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return [self readRowCount:@"SELECT COUNT(label) FROM colour;"];
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"%d", [arrColour count]);
    CustomViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ItemCell" forIndexPath:indexPath];

  //  if (cell == nil) {
    //    cell = [[CustomViewCell alloc]init];
    //}

    cell.label.text = [NSString stringWithFormat:@"%@",[ [arrColour objectAtIndex:indexPath.item ]label] ];

    CellData *redObj = [arrColour objectAtIndex:indexPath.row];
    CellData *greenObj = [arrColour objectAtIndex:indexPath.row];
    CellData *blueObj = [arrColour objectAtIndex:indexPath.row];

    float redF = [[redObj red] floatValue];
    float greenF = [[greenObj green] floatValue];
    float blueF = [[blueObj blue] floatValue];
    //NSLog(@"Colours: %f-%f-%f", redF, greenF, blueF);
    cell.backgroundColor = [UIColor colorWithRed:redF/255.0f green:greenF/255.0f blue:blueF/255.0f alpha:1];

    return cell;
}

我重新加载数据的地方 - 按钮:

- (IBAction)btnAdd:(id)sender {
   NSString *myRed = [NSString stringWithFormat: @"%1.4f", slideR.value];
   NSString *myGreen = [NSString stringWithFormat: @"%1.4f", slideG.value];
   NSString *myBlue = [NSString stringWithFormat: @"%1.4f", slideB.value];
    if(txtField != nil){


        [colMain reloadData];
    }

在这种情况下,arrColour(Mutable Array)包含相同数量的元素。集合视图未重新加载的内容是什么?

2 个答案:

答案 0 :(得分:1)

您是否有充分的理由直接使用Sqlite而不是使用Core Data,这很好地抽象了大部分低级别持久性复杂性?

无论如何,如果你必须,这就是你现在的方法如何:

  1. 将您的Sqlite数据加载到模型中,例如NSArray*属性或实例变量。在-viewDidLoad(或更高版本)中初始化并填充数组。
  2. 更改您的datasource实施以使用该数组,例如return [self.colors] numberOfItemsInSection方法中的datasource
  3. 添加或替换模型项时更改(或替换)模型数组。然后在集合视图上调用-reloadData
  4. 其他一些提示:    - 你确定你真的想在集合视图中有3个部分(“组”项目)吗?如果您确实没有,请完全删除-numberOfSectionsInCollectionView实施。    - 当您执行arrColors[indexPath.item时,您将获得相同的对象三次。当然这不是你的意图吗?考虑使用UIColor作为数组的元素,或将颜色值包装在自定义NSObject子类中。

    希望这能为您提供一些如何开始的建议。

答案 1 :(得分:0)

实际上,我需要做的是为我的自定义对象设置“强大”的属性。那就是我在自定义对象中存储RGB颜色的值。