2015-04-07 1 views
0

Permettez-moi de décrire mon problème. J'ai écrit une classe appelée CardCell qui a hérité de UICollectionViewCell. Dans mon autre classe, MainViewController, une sous-classe de UICollectionView. Une instance de NSMutableArray, items, a été créée pour stocker les données de chaque cellule.Impossible de trouver le membre 'CellForItemAtIndexPath'

éléments var = NSMutableArray()

self.items = NSMutableArray (capacité: 20) pour i à 0 ... 20 { items.addObject ("Point (i)") }

Déplacement items vers indexPath de CollectionView et prêt à être appelé.

func collectionView(collectionView: UICollectionView!, moveItemAtIndexPath fromIndexPath: NSIndexPath!, toIndexPath: NSIndexPath!) { 
    var thing: NSString = items[fromIndexPath.item] as NSString 
    self.items.removeObjectAtIndex(fromIndexPath.item) 
    self.items.insertObject(thing, atIndex: toIndexPath.item) 
} 

Enfin, je suis en train de créer une instance de CardCell avec le items.

var cell: CardCell = CardCell(self.collectionView?.cellForItemAtIndexPath(self.collectionView?.indexPathsForSelectedItems().first)) 

Ensuite, une erreur est survenue "Impossible de trouver membre 'CellForItemAtIndexPath'". Une chose que je dois dire est que ces codes ont été traduits à partir d'une version Objective-C.

La version Objective-C:

PassCell *cell = (PassCell *)[self.collectionView cellForItemAtIndexPath:[[self.collectionView indexPathsForSelectedItems] firstObject]]; 

S'il vous plaît aidez-moi à résoudre ce problème.

Une grande appréciation pour votre guide et votre temps.

Ethan Joe

+0

avez-vous mentionné 'UICollectionViewDelegateFlowLayout' dans les délégués – Shruti

+0

@Shruti, voulez-vous dire' UICollectionViewDelegate'? Où est le besoin de 'UICollectionViewDelegateFlowLayout' ?? – itsji10dra

+0

J'ai eu un problème similaire une fois. J'ai ajouté ce délégué et il a été résolu. Alors, essayez-le. – Shruti

Répondre

1

Peut-être que quelque chose a mal tourné avec la traduction de Objective-C. Je ne pense pas que vous pouvez utiliser une méthode d'instance UICollectionView pour initialiser votre cellule personnalisée.

Dans le code Objective-C, vous transtypez le résultat dans le type de cellule personnalisé. Je crois à Swift, vous devriez faire la même chose (notez que je partage la déclaration en deux pour améliorer la lisibilité):

let indexPath = self.collectionView?.indexPathsForSelectedItems().first as IndexPath 
var cell = self.collectionView?.cellForItemAtIndexPath(indexPath) as CardCell 

Remarque: en fonction de vos définitions que vous pourriez avoir besoin as? ou as! pour l'opérateur coulé.

+0

Merci pour votre réponse. Une autre erreur se produit dans la deuxième ligne de votre réponse. Complier a dit que '?' qui est derrière 'self.collectionView' doit être supprimé en raison de 'type is (UICollectionView, didSelectItemAtIndexPath: NSIndexPath) ->()' –

+0

Après l'avoir corrigé comme 'var cell = self.collectionView? .cellForItemAtIndexPath (chemin d'index comme NSIndexPath) ', il construit et couru avec succès. –

+0

J'ai ajouté la conversion pour 'indexPath' à la première instruction. Merci d'avoir signalé ce détail. – Mundi