2014-10-08 77 views
0

我有一个包含25个单元格的集合视图对于一个单元格,我将文本颜色创建为白色。现在,当我重新加载集合视图时,其他单元格的文本颜色也会在我重新加载集合视图时逐渐变为白色。我不知道问题在哪里。这是我的代码。收集视图中的奇怪行为

 if (indexPath.item == 0) 
    { 
     myCell.hidden=NO; 
     NSLog(@"index path = %ld",(long)indexPath.row); 
     NSArray *Object= [[jsonData valueForKey:@"TimeTabledPeriods"]objectAtIndex:0]; 
     NSLog(@"object %@",Object); 
     myCell.roomLabel.text= [NSString stringWithFormat:@"Room: %@", [Object valueForKey:@"RoomDescription"]]; 
     myCell.subjectLabel.text = [Object valueForKey:@"SubjectDescription"]; 
     [myCell.redXbuttonOutlet setTag:indexPath.row]; 
     [myCell.redXbuttonOutlet addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
     myCell.noSessionView.backgroundColor=[UIColor clearColor]; 
     myCell.myLearningChoicesBackground.hidden=YES; 

     if ([[Object valueForKey:@"Changed"] isEqualToString:@"YES"]) 
     { 
      if ([[Object valueForKey:@"ChangedColorCode"] isEqualToString:@"Present"]) 
      { 
       myCell.noSessionView.backgroundColor=[UIColor colorWithRed:97.0/255.0 green:182.0/255.0 blue:73/255.0 alpha:1]; 

    //The below lines to change the text color to white is written only for index path 0 
       myCell.roomLabel.textColor=[UIColor whiteColor]; 
       myCell.subjectLabel.textColor=[UIColor whiteColor]; 

      } 

     } 
//code for other cells 

    if (indexPath.item == 1) 
{ 
    myCell.hidden=NO; 
    NSLog(@"index path = %ld",(long)indexPath.row); 
    NSArray *Object= [[jsonData valueForKey:@"TimeTabledPeriods"]objectAtIndex:0]; 
    NSLog(@"object %@",Object); 
    myCell.roomLabel.text= [NSString stringWithFormat:@"Room: %@", [Object valueForKey:@"RoomDescription"]]; 
    myCell.subjectLabel.text = [Object valueForKey:@"SubjectDescription"]; 
    [myCell.redXbuttonOutlet setTag:indexPath.row]; 
    [myCell.redXbuttonOutlet addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    myCell.noSessionView.backgroundColor=[UIColor clearColor]; 
    myCell.myLearningChoicesBackground.hidden=YES; 

    if ([[Object valueForKey:@"Changed"] isEqualToString:@"YES"]) 
    { 
     if ([[Object valueForKey:@"ChangedColorCode"] isEqualToString:@"Present"]) 
     { 
      myCell.noSessionView.backgroundColor=[UIColor colorWithRed:97.0/255.0 green:182.0/255.0 blue:73/255.0 alpha:1]; 

     } 

    } 

    if (indexPath.item == 3) 
{ 
    myCell.hidden=NO; 
    NSLog(@"index path = %ld",(long)indexPath.row); 
    NSArray *Object= [[jsonData valueForKey:@"TimeTabledPeriods"]objectAtIndex:0]; 
    NSLog(@"object %@",Object); 
    myCell.roomLabel.text= [NSString stringWithFormat:@"Room: %@", [Object valueForKey:@"RoomDescription"]]; 
    myCell.subjectLabel.text = [Object valueForKey:@"SubjectDescription"]; 
    [myCell.redXbuttonOutlet setTag:indexPath.row]; 
    [myCell.redXbuttonOutlet addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    myCell.noSessionView.backgroundColor=[UIColor clearColor]; 
    myCell.myLearningChoicesBackground.hidden=YES; 

    if ([[Object valueForKey:@"Changed"] isEqualToString:@"YES"]) 
    { 
     if ([[Object valueForKey:@"ChangedColorCode"] isEqualToString:@"Present"]) 
     { 
      myCell.noSessionView.backgroundColor=[UIColor colorWithRed:97.0/255.0 green:182.0/255.0 blue:73/255.0 alpha:1]; 

     } 

    } 

//等 }

+0

现在,这是的tableView或的CollectionView – EridB 2014-10-08 13:42:01

+0

colelction视图 – iOSDeveloper 2014-10-08 13:47:36

+0

你可以添加其他单元的代码吗? – hoya21 2014-10-08 13:47:36

回答

1

这种行为没有什么“奇怪的”,这是没有正确处理细胞再利用的结果。您在第一个if子句中将文本设置为白色,但从未将其设置回其他if子句中的任何其他颜色。所以,当这个单元格被重用时,它的文本仍然会被设置为白色。它也看起来,除了那些颜色变化的代码在你的每个if子句中是相同的,所以你甚至不应该为每个项目都包含所有这些if子句;您需要重构代码以消除所有重复。的任何外部if语句,如果你真的还需要其中任何一个,你应该文字颜色为白色的唯一项目设置为0,并以黑色为所有其他人,

myCell.roomLabel.textColor = (indexPath.item == 0)? [UIColor whiteColor] : [UIColor blackColor]; 
myCell.subjectLabel.textColor= (indexPath.item == 0)? [UIColor whiteColor] : [UIColor blackColor]; 
1

我想你想的第一个项目,而不是第一行。

if (indexPath.item == 0) 
{ 
    myCell.hidden=NO; 
    NSLog(@"index path = %ld",(long)indexPath.row); 
    NSArray *Object= [[jsonData valueForKey:@"TimeTabledPeriods"]objectAtIndex:0]; 
    NSLog(@"object %@",Object); 
    myCell.roomLabel.text= [NSString stringWithFormat:@"Room: %@", [Object valueForKey:@"RoomDescription"]]; 
    myCell.subjectLabel.text = [Object valueForKey:@"SubjectDescription"]; 
    [myCell.redXbuttonOutlet setTag:indexPath.row]; 
    [myCell.redXbuttonOutlet addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    myCell.noSessionView.backgroundColor=[UIColor clearColor]; 
    myCell.myLearningChoicesBackground.hidden=YES; 

    if ([[Object valueForKey:@"Changed"] isEqualToString:@"YES"]) 
    { 
     if ([[Object valueForKey:@"ChangedColorCode"] isEqualToString:@"Present"]) 
     { 
      myCell.noSessionView.backgroundColor=[UIColor colorWithRed:97.0/255.0 green:182.0/255.0 blue:73/255.0 alpha:1]; 

//The below lines to change the text color to white is written only for index path 0 
      myCell.roomLabel.textColor=[UIColor whiteColor]; 
      myCell.subjectLabel.textColor=[UIColor whiteColor]; 

     } 

    } 

编辑

这是我如何处理集合视图细胞。

UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:indexPath]; 

//cell.backgroundColor = [UIColor greenColor]; 
UILabel *label = (UILabel *)[cell viewWithTag:101]; 

UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100]; 


UIStoryboard *storyboard=[[UIStoryboard alloc] init]; 



currentIndexPath=indexPath; 

int selectedCellNum=(int)indexPath.item; 

if (selectedCellNum==0) { 

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 


     storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil]; 
    } 
    else 
    { 
     storyboard = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil]; 

    } 



    recipeImageView.image = [UIImage imageNamed:@"1B copy.png"]; 

    label.textColor = [UIColor blackColor]; 

    POISTableViewController * destViewController = [storyboard instantiateViewControllerWithIdentifier:@"POISList"]; 



    destViewController.selectedCategory=0; 

    destViewController.sightsToShow=self.groups; 

    [self.navigationController pushViewController:destViewController animated:YES]; 







} 
else if (selectedCellNum==1) 
{ 

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 


     storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil]; 
    } 
    else 
    { 
     storyboard = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil]; 

    } 



    recipeImageView.image = [UIImage imageNamed:@"2B copy.png"]; 

    label.textColor = [UIColor blackColor]; 

    MonumentsViewController * destViewController = [storyboard instantiateViewControllerWithIdentifier:@"MonumentsViewController"]; 

    destViewController.sightsToShow=self.groups; 

    [self.navigationController pushViewController:destViewController animated:YES]; 




} 
+0

没有变化...它的行为与之前的相同 – iOSDeveloper 2014-10-08 13:57:33

+0

尝试更改if if else。或者它可以工作。或者使用indexPath值进行一些调试,并且如果它得到错误的条件代码。 – hoya21 2014-10-08 14:01:24

+0

与我所做的一样...我认为它的行为和细胞太多 – iOSDeveloper 2014-10-08 14:27:52