2017-05-28 1 views
0

J'ai cette méthode:Changer le type de classe générique dans la sous-classe

-(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer 
{ 
    if (gestureRecognizer.state == UIGestureRecognizerStateBegan) { 
     CGPoint p = [gestureRecognizer locationInView:self.collectionView]; 
     NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:p]; 
     if (indexPath == nil){ 
      NSLog(@"couldn't find index path"); 
     } else { 
      UICollectionViewCell* cell = [self.collectionView cellForItemAtIndexPath:indexPath]; 
         if ([cell isKindOfClass:[MWGradeCell class]]){ 
       NSLog(@"Yes"); 
      //here I would like to get a custom property "cell.gradeLabel.text" that is specific to MWGradeCell 
      } else{ 
       NSLog(@"No"); 
      } 
     } 

    } else{ 
     NSLog(@"ended"); 
    } 

} 

Il reconnaît que UICollectionviewcell d'un UICollectionview est longue pressée. Mon UICollectionView est construit avec différents types de UICollectionViewCells sous-classés, chacun avec des propriétés différentes.

Maintenant, je veux seulement obtenir une propriété d'un type de cellule spécifique, mais pour ce faire, je dois d'une manière ou d'une autre changer le UICollectionViewCell reconnu en un MWGradeCell.

Aucune idée comment. Heureusement, vous les gens sont autour

Répondre

0

Je ne sais pas si je comprends la question, mais vous pouvez juste jeter cellulaire comme:

MWGradeCell* cell = (MWGradeCell *)[self.collectionView cellForItemAtIndexPath:indexPath]; 

ne me souviens pas si (MWGradeCell *) est vraiment nécessaire

+0

Merci, je l'ai fait cette. Mais l'application s'est écrasée sur différentes classes. Puis j'ai essayé le code ci-dessus. J'aurais dû combiner les deux approches. Et oui, le (MWGradeCell *) EST nécessaire, sinon le cellforitematindexpath ne fonctionnera pas. – Sjakelien