更改UICollectionView iOS中标签的颜色

时间:2015-02-23 11:19:33

标签: ios objective-c iphone uicollectionview

嗨,我正在处理日历的集合视图。我在集合视图中放了一个标签。我从一个静态数组中给这个标签赋值,我在其中添加了月份名称。现在我必须根据值0和1更改标签的颜色。如果1则标签变为绿色,如果0变为红色。我得到的这些0和1值构成了JSON。我把这些值放在数组中。

现在我的问题是当我在cellForItemAtIndexPath中使用这个数组然后崩溃,因为行数是12而valueArray的数量是2.有没有办法解决这个问题。感谢..!

1 个答案:

答案 0 :(得分:0)

问题是数据模型不一致。

1)无论您的数据来自何处(网络,JSON ..等),您都需要获得关键值对的NSDictionary。 关键 - 月 值 - 红色或蓝色

2)然后在collectionView:numberOfItemsInSection中:你应该像这样返回字典中的项目数

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
 {
    return [dictionary allKeys] count];
}

3)在ViewController中创建月份映射数组。简单的NSArray将包含12个NSStrings - 您的月份。

-(NSArray *)months
{
return @[@"january",
         @"february",
         @"march"
         @"april",
         @"may",
         @"june"
         @"july",
         @"august",
         @"september",
         @"october",
         @"november",
         @"december"];

}

4)最后,您将在didSelectItem中处理您的具体项目...通过检索特定索引的月份...然后设置单元格以匹配该月份的值...并根据您将设置的值颜色。

-(void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
{
    //....other code here

    NSString *month = self.monthsArray[indexpath.row];
    NSString *value = self.monthsDictionary[month];

    if (value isEqualToString:@"red")
    { 
        coolectionViewCell.color = [UIColor redColor];
    }
   etc..

奖金: 你没有说出红色和绿色意味着什么,但是你真的应该为那个东西声明一个枚举,因为这是一个自定义类型。你可以将你的枚举作为NSNumbers包装在字典中 月映射数组也很简陋,但我不想压倒你。我确信NSDateFormatter可以通过全面的本地化方式在几个月内使用某种机制。