Il est assez simple en fait, une fois que vous arrivez à le comprendre (bien sûr!). Vous ne pouvez pas utiliser un NSArray directement en tant que source de table. Vous devez soit créer un objet personnalisé qui implémente NSTableViewDataSource ou implémenter ce protocole dans une classe existante - généralement un contrôleur. Si vous utilisez Xcode pour créer une application basée sur un document standard, la classe de contrôleur de document - (elle s'appellera MyDocument) est une bonne classe à utiliser.
Vous devez mettre en œuvre au moins ces deux méthodes:
– numberOfRowsInTableView:
– tableView:objectValueForTableColumn:row:
Si vous avez un tableau mutable dont les valeurs que vous souhaitez utiliser dans une vue de table avec une colonne, quelque chose comme ce qui suit devrait faire comme un début:
– numberOfRowsInTableView: (NSTableView*) aTableView
{
return [myMutableArray count];
}
– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex
{
return [myMutableArray objectAtIndex: rowIndex];
}
Il vient de vous me est apparu que pouvez ajouter les deux méthodes ci-dessus en tant que catégorie à NSArray remplaçant myMutableArray
avec self
et vous pouvez utiliser un tableau comme une source de données.
Quoi qu'il en soit, avec un tableau mutable, il est important que chaque fois que vous changez, vous devez laisser la vue du tableau sais qu'il a été changé, vous devez envoyer la vue du tableau -reloadData
.
Si votre point de vue de la table a plus d'une colonne et que vous voulez le remplir avec les propriétés des objets dans votre tableau, il y a un truc que vous pouvez faire pour le rendre plus facile pour vous-même.Disons que les objets de votre tableau sont des instances d'une classe appelée personne avec deux méthodes définies:
-(NSString*) givenName;
-(NSString*) familyName;
et vous voulez que votre vue de table pour avoir une colonne pour chacun de ceux-ci, vous pouvez définir la propriété identifier
de chaque colonne au nom de la propriété en personne que qui affiche des colonnes et utiliser quelque chose comme ce qui suit:
– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex
{
Person* item = [myMutableArray objectAtIndex: rowIndex];
return [item valueForKey: [tableColumn identifier]];
}
Si vous remplacez valueForKey:
avec valueForKeyPath:
et votre classe Person a aussi les méthodes suivantes:
-(Person*) mother;
-(Person*) father;
-(NSString*) fullName; // concatenation of given name and family name
Vous pouvez ajouter des colonnes de table avec des identifiants tels que: father.fullName
ou mother.familyName
et les valeurs seront automatiquement remplies.
ce lien ne fonctionne pas !! s'il vous plaît le mettre à jour! – elin3t