Récupérer la ligne d'un tableau qui va être affichée
muqaddar
Administrateur
Si selectedRow permet de récupérer la ligne sélectionnée, comment récupérer la ligne qui va être sélectionnée avant une validation de sélection possible grâce au delegate :
- (BOOL)selectionShouldChangeInTableView:(NSTableView *)aTableView
Car suite à une boà®te de dialogue qui confirme ou non l'enregistrement, il faut afficher cette fameuse nouvelle ligne sur laquelle on vient d'appuyer.
Mais suis-je clair ?
- (BOOL)selectionShouldChangeInTableView:(NSTableView *)aTableView
Car suite à une boà®te de dialogue qui confirme ou non l'enregistrement, il faut afficher cette fameuse nouvelle ligne sur laquelle on vient d'appuyer.
Mais suis-je clair ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Regarde la suivante (dans la table des matière).
Moi, je pensais que c'était la bonne pour ce que je veux faire. Qu'appelles-tu la table des matières ? Si je regarde les méthodes délégués de NSTableView, la suivante est : tableView:didClickTableColumn:
qui n'a rien à voir.
Cependant, je pense que tu veux p-e parler de celle-ci :
- (void)tableViewSelectionIsChanging:(NSNotification *)aNotification
qui ne me va pas non plus puisque la sélection est effectuée avant que je n'ai pu confirmer la moindre boà®te de dialogue concernant la sélection précédente.
Normalement, celle qui m'intéresse est bien celle de mon premier post : - (BOOL)selectionShouldChangeInTableView:(NSTableView *)aTableView
à savoir si on autorise le changement de sélection (dans mon cas, une fois la confirmation effectuée par boà®te de dialogue).
[tt]- (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(int)rowIndex[/tt]
Sinon la table des matières est la liste des méthodes de délégués au début de la page de nstableview.
Et bien, je n'avais pas remarqué que l'ordre de la liste dans la table des matières n'est pas le même que l'ordre des méthodes expliquées.
Voilà le delagate :
Puis la méthode qui doit envoyer YES, mais seulement après affichage de la boà®te de dialogue, et ce, que l'on clique sur valider ou non.
et
Sauf que dans mon cas, le return YES (juste après l'ouverture de la sheet) est trop tôt, il devrait avoir lieu dans la méthode suivante... qui elle n'est pas reliée à mon delegate.
Je pensais envoyer le numéro de ligne qui doit être sélectionné, et faire un selectRow dans la dernière méthode, mais mon seul moyen serait d'en faire une variable d'instance, ce qui semble démesuré.
Quelle autre solution avez-vous ?
Il ne me reste plus qu'à contrôler la notification sur le texte des NSTextView qui ne répond pas à : NSControlTextDidChangeNotification. Et je n'ai rien vu d'intéressant dans les autres notifications proposées.
Celle-ci n'est valable que pour les changements d'attributs :
NSTextViewDidChangeTypingAttributesNotification
L'ai-je loupé ou dois-je procéder autrement ?
[tt]- (BOOL)textView:(NSTextView *)aTextView shouldChangeTextInRange:(NSRange)affectedCharRange replacementString:(NSString *)replacementString
[/tt]
Elle va t'indiquer qu'un changement va avoir lieu, tu fais alors ce que tu as à faire et tu retournes YES pour autoriser le changement.
:adios!:
Je me suis fait avoir.
Mes objets observateurs surveillent tous les contrôles, mêmes ceux des préférences. Et j'ai des tags qui ont la même valeur ds ma fenêtre des préférences que ma fenêtre principale. Du coup, il notifie aussi quand je modifie ces fields, ce qu'il ne faut pas.
Peut-on cantonner (pas le riz) la notification à une fenêtre en particulier ? Où suis-je condamné à modifier mes tags ds mes préférences ?
if ([notification object] appartientAmaFenetre:_mainWindow)...
Sans exagérer, je ne vois vraiment pas par quelle méthode je peux vérifier qu'un objet est inclu dans la vue d'une fenêtre. :crackboom:-
Peux-tu me mettre sur la voie ?
merci :why?:
A toi de savoir quels objets sont dans telle fenêtre et ensuite de faire l'action désirée selon la comparaison (via les outlets ou des arrays repertoriant pour chaque fenêtre les pointeurs des objets la composant), mais c'est assez lourd, et je pense vraiment qu'il faut plutôt tagger tes objets (et pas tes murs ) en réorganisant les tags du mieux possible, par exemple, les tags d'une fenêtre commençant par 1, ceux d'une autre fenêtre commençants par 2, etc...:)
Beaucoup trop compliqué à traiter, les opérateurs & | et ^ sont bitwise. J'avais expliqué ce principe dans l'annexe de mon tuto sur le glissé-déposé.
Et donc le principe serait de dire les tags des préférences sont dans [2048,4096[ (on est pas obligé de le faire avec une puissance de 2 ceci dit, mais c'est plus simple à gérer). Donc pour savoir si un controle vient d'une fenêtre, on fait juste pour les prefs
[tt]if ([[notif object] tag] & 2048)[/tt]
C'est vrai que l'on peut récupérer la window via l'héritage NSView, cette solution serait vraiment la plus pratique...sinon j'irais jeter un coup d'oeil à ton tuto sur le drag&drop pour les explications sur le bitwise.
if ([[notification object] window]==_mainwindow)
En revanche, je ne suis pas sûr d'avoir compris le bitwise... Il faudra que je relise ton article.
En ce qui concerne l'organisation de mes tags, il n'y a que dans les préférences que certains avaient la valeur de ceux de mon application. Mais j'y veillerai la prochaine fois.
merci à tous les deux