2014-10-08 3 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

+0

colelction – iOSDeveloper

+0

Можете ли вы добавить код для других ячеек? – hoya21

ответ

1

Нет ничего странного в этом поведении, это результат неправильного использования повторного использования ячеек. Вы устанавливаете текст в белый внутри этого предложения first 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]; 

     } 

    } 

EDIT

Вот это, как я обрабатывать вид сбора клеток.

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

+0

попытаться изменить if else. If.Maybe it works.Or сделать некоторые отладки с помощью значения indexPath и если он попадает в неправильный код условия. – hoya21

+0

то же, что и я сделал ... я думаю, что это слишком много строк и ячеек – iOSDeveloper

Смежные вопросы