Comment accéder à NSTextFieldCell dans une TableView ?

mickadedel

Membre confirmé
29 Août 2006
33
0
Bonsoir à tous,
Voici mon soucis : j'ai une tableView que j'ai subclassée afin de lui donner des propriétés particulières, notamment qu'une pression de la touche retour arrière envoi le message "supp:(id)sender" à un objet. Cette méthode supprime un objet et donc la/les ligne(s) sélectionnées de ma tableView. Pas de soucis => J'ai overridé la méthode keyDown de NSTableView.

Le problème : après l'édition de ma dernière cellule, je voudrais envoyer le message "ajoute:(id)sender" à un objet, ce qui aura pour effet de créer une nouvelle ligne. Pour cela j'ai pensé overrider la méthode textDidEndEditing:(NSNotification *)aNotification. Au débug, le message est bien envoyé, et la nouvelle ligne est bien créée. Le problème est que je n'arrive pas à définir le nouveau NSTextFieldCell créé comme firstResponder. Quelqu'un aurait une stratégie ?Quelle méthode permet d'accéder à ces textFieldCell fraîchement créés ?
 
Bonjour à tous,

Je me permets de relancer : comment, et ceci proprement, choper la fin de l'édition de la dernière cellule d'une tableView afin de lancer la création de nouveaux objets, qui ajoute donc aussi une nouvelle row à la tableView, et surtout comment DONNER LE FIRSTRESPONDER A CETTE DERNIERE LIGNE ?

Encore une fois : en utilisant la méthode textDidEndEditing, j'arrive à déterminer si la dernière cellule vient d'etre éditée, j'arrive à envoyer la création du nouvel objet qui crée donc une nouvelle row, mais systématiquement la main est donnée à la première cellule de ma tableView.

PITIE, il y a quelqu'un !!?....
 
Take it easy ;)

A partir d'un projet simple ne contenant qu'une tableView, pour ajouter une nouvelle ligne lors d'un TAB sur la dernière cellule, j'ai utilisé une seule et unique méthode: setObjectValue:
Bloc de code:
- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex
{
	printf("row %d col %d \n",[oTableView editedRow],[oTableView editedColumn]);
	
	if([oTableView editedColumn]==1) // dernière colonne ?
		{
		int newRow=[oTableView editedRow]+1;
		
		if(newRow>=nbRows)  // dernière ligne ?
			{
			nbRows++; // ajouter les nouvelles données ici
			[oTableView reloadData];
			}
			
		[oTableView selectRow:newRow byExtendingSelection:NO];
		[oTableView editColumn:0 row:newRow withEvent:nil select:YES];


		}
}