Je veux changer la couleur de fond de texte sur une cellule de la TableView lorsqu'elle est planifiée, similaire à la "mise en évidence" de l'étiquette d'un élément d'un contact lorsque vous marchiez les noms d'étiquettes. Cependant, je ne peux pas comprendre comment accomplir ... P>
Détecter une sourisovante sur un nscell et ... Après avoir détecté la cellule saillie, soulignant le texte dans cette cellule (ne mettant pas en surbrillance la ligne entière comme si l'utilisateur a sélectionné cette ligne) P>
Comme nscell n'est pas une sous-classe de Nsview, cela semble être une tâche très difficile. P>
Un exemple de ceci ou d'explication sur la manière dont cela pourrait être fait serait grandement apprécié. p>
Merci! P>
3 Réponses :
Globalement, ce n'est pas une tâche simple que vous avez remarqué.
Pour suivre la souris dans un nscell, Sous-classe Nscell et remplacer P>
-[NSCell stopTracking:at:inView:mouseIsUp:]
Merci pour l'info! Pour une raison quelconque, mon démarrage: AVIEW: ou StopTracing: AT: AVIEW: MODEISUP Les méthodes ne sont pas appelées ... Je sais que ma table ne prend pas en charge la sélection car je ne souhaite pas que l'utilisateur puisse sélectionner une rangée ... Je me demande si cela vérifie cela.
Êtes-vous sûr que votre sous-classe est utilisée dans la table?
C'est-à-dire que vous avez fait la cellule de la colonne une instance de votre sous-classe personnalisée?
Je l'ai réellement utilisé en utilisant une autre méthode. J'en ai eu de l'exemple publié ici ... http://www.cocoadev.com /index.pl?nstableviewrollover s>
https://web.archive.org/web /20111013060111/http://cocoadev.com/index.pl?nstableviewrollover P>
Au lieu d'utiliser le mécanisme de suivi de Nscell, je suive la surveillance de MouseNered / Mouseexited et Mousemoved dans mon sous-classement NSTableView. P>
Lorsque la méthode de la TableView Awakefromnib est appelée, je crée un trackingrect à partir de la partie visible de la tableView P> LI>
J'ai un ivar Bool qui est réglé sur Oui lorsque la souris se trouve dans la zone de suivi (MouseNered) et non quand il n'est pas (Mouseexité) P> Li>
Dans la méthode Mousemoved, je détermine la ligne actuelle que le curseur de la souris est activé et définissez-le sur une ivar Nsinteger, puis appelez la table SetNeedsDisplayInrect de la TableView: Passant le record de la rangée sur laquelle se trouve la souris. P > li>
Je remplace également ResetCursorrects pour supprimer l'ancien rect de suivi et ajouter un nouveau ... Cette méthode est appelée lorsque la vision de la table est défilée de manière à suivre le dernier rect visible. p> li >
Enfin dans ma déléguée de la TableView, je détermine la ligne sélectionnée (en récupérant l'index de la ligne de la Nsinteger ivar de la vue Table de la table et modifie la couleur du texte de la cellule (ou tout ce que vous voulez) si la cellule actuellement tirée correspond à la Rangez le curseur de la souris. Tout cela se fait dans la méthode du délégué: TableView: (NSTableView *) ATABLEVIEW WILLDISPLAYPELL: (NSTABLECOLUMN *) ABLOBECOLUM ROW: (NSInteger) Rowindex P> Li> ol>
J'espère que cela aide les autres, car c'était un peu délicat. Il est également probablement important de veiller à ce que la TableView est la Straightsponder lorsque la vue se charge, rend les choses un peu plus simples et plus propres. P>
BTW, y a-t-il un moyen de contrôler un contrôle spécifique dans une vue toujours la main-à-feu sans rien d'autre possible comme étant le facilitaileur? Même une méthode telle que les iphones ... La méthode de la viewwillappear vous aidera à définir le premier répondeur à chaque fois que la vue est visible ... mais je ne suis pas au courant d'une telle méthode sur le Mac. P>
C'est la deuxième fois que j'ai retrouvé mon chemin vers cette réponse et que j'ai trouvé utile. Merci!
J'ai obtenu quelque chose de similaire en utilisant Utilisation de ces informations, j'ai pu amener une colleure lorsque la souris était sur une cellule particulière. p> AddglobalmonitorForeVentsMatchingmask: Hangler: code> de NSEvent code> dans ma sous-classe NSTableView pour le NSMousemovedmask code>. En utilisant ceci avec columnatpoint code> et rowatpoint code> de NSTableView, j'ai pu comprendre si la position de la souris était dans une cellule donnée. P>