嗨,我正在处理日历的集合视图。我在集合视图中放了一个标签。我从一个静态数组中给这个标签赋值,我在其中添加了月份名称。现在我必须根据值0和1更改标签的颜色。如果1则标签变为绿色,如果0变为红色。我得到的这些0和1值构成了JSON。我把这些值放在数组中。
现在我的问题是当我在cellForItemAtIndexPath
中使用这个数组然后崩溃,因为行数是12而valueArray的数量是2.有没有办法解决这个问题。感谢..!
答案 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可以通过全面的本地化方式在几个月内使用某种机制。