Est-il possible d'empêcher le NSTokenField de tout sélectionner en appuyant sur la touche ENTRÉE ou en faisant au premier répondeur en utilisant peut-être la touche TAB?Empêcher la sélection de tous les jetons dans NSTokenField
Répondre
Un NSTokenField est une sous-classe de NSTextField. Il n'y a pas de moyen facile et direct de manipuler directement la sélection de ces classes (à l'exception de -selectText :, qui sélectionne tout).
Pour ce faire, quand il devient le premier intervenant, vous aurez besoin de sous-classe NSTokenField (souvenez-vous de définir la classe du champ dans votre XI ter celle de votre sous-classe personnalisée) et passer outre -becomeFirstResponder comme ceci:
- (BOOL)becomeFirstResponder
{
if ([super becomeFirstResponder])
{
// If super became first responder, we can get the
// field editor and manipulate its selection directly
NSText * fieldEditor = [[self window] fieldEditor:YES forObject:self];
[fieldEditor setSelectedRange:NSMakeRange([[fieldEditor string] length], 0)];
return YES;
}
return NO;
}
Ce code cherche d'abord à voir si super répond "oui" (et devient le premier répondeur). Si c'est le cas, nous savons qu'il aura un éditeur de champ (une instance NSText), dont la sélection peut directement manipuler. Nous obtenons donc son éditeur de champs et définissons sa plage sélectionnée (je place le point d'insertion à la fin avec une plage {lastchar, nolength}).
Pour ce faire, lorsque le champ est fait édition (retour, sur la tabulation, etc.), de la correction -textDidEndEditing: comme ceci:
- (void)textDidEndEditing:(NSNotification *)aNotification
{
[super textDidEndEditing:aNotification];
NSText * fieldEditor = [[self window] fieldEditor:YES forObject:self];
[fieldEditor setSelectedRange:NSMakeRange([[fieldEditor string] length], 0)];
}
Dans ce cas, lorsque l'utilisateur se termine l'édition, cette méthode permet de super faire sa chose, alors il regarde pour voir si c'est toujours le premier répondeur. Si c'est le cas, il fait la même chose que ci-dessus: met l'insertion carat à la fin du champ.
Notez que ce comportement n'est pas standard et inattendu. Utiliser avec modération.
- 1. Redimensionnement de NSTokenField après remplissage avec des jetons
- 2. Session de jetons Utilisation de jetons pour empêcher les soumissions de formulaires en double?
- 3. Sélection de tous les liens
- 4. Sélection de tous les éléments
- 5. Barres de défilement dans NSTokenField
- 6. Empêcher la sélection en HTML
- 7. NSTextView avec des jetons
- 8. NSTokenField autocomplete
- 9. Remplir un NSTokenField avec des jetons à partir d'un conteneur d'objets
- 10. Équivalent Qt de NSTokenField
- 11. Multiligne NSTokenField et la touche de retour
- 12. PyParsing: tous les jetons ne sont pas passés à setParseAction()
- 13. Empêcher fullcalendar d'accepter tous les objets "droppable"
- 14. Empêcher la sélection de date antérieure dans .NET DateTimePicker
- 15. Listbox avec liste personnalisée - empêcher la sélection?
- 16. jQuery - Sélection de tous les NON-Matches?
- 17. Sélection de tous les champs sauf un?
- 18. Sélection de tous les éléments après la liaison WPF ListView
- 19. Sélection de tous les objets enfants dans LINQ
- 20. NSTokenField avec entrée de jeton/chaîne mixte, possible?
- 21. Empêcher la sélection multiple dans le contrôle d'onglet WPF?
- 22. script shell pour le remplacement des jetons dans tous les fichiers dans un dossier
- 23. Mail.app comme NSTokenField pour les noms et les e-mails
- 24. La sélection d'un nœud XML ensemble va tous les enfants
- 25. Empêcher la sélection de texte après un double-clic
- 26. DropDrop sélection événement rafraîchir tous les UpdatePanel dans Ajax
- 27. comment personnaliser NSTokenField comme dans "To/CC" des champs dans le courrier mac?
- 28. comment obtenir une liste de tous les jetons de l'indice Solr/Lucene?
- 29. Comment puis-je extraire tous les jetons {} d'une chaîne à l'aide de RegEx de .Net?
- 30. Sélection de tous les ListBoxItems en double-cliquant sur
Merci Joshua, ça marche! Mais qu'en est-il du comportement lorsque vous appuyez sur ENTRÉE. Essayer de remplacer le 'keyDown:' ne fonctionne pas. Une idée pour désactiver ce comportement? – Robert
J'ai mis à jour la réponse avec l'instruction -textDidEndEditing: case. Puisque les deux méthodes finissent par appeler la même chose, cela commence à ressembler à un travail de refactoring. Je voudrais sortir le code de l'éditeur de champ dans sa propre méthode (comme -adjustSelection) et l'appeler pour rendre le code plus lisible et moins répétitif. –
Le cas textDidEndEditing: ne fonctionne pas correctement pour moi. Disons un ensemble le curseur de texte après le dernier jeton et ne commencez pas à taper n'importe quel caractère mais simplement cliquez sur RETOUR. Dans ce cas, tous les tags sont sélectionnés même si j'ai ajouté votre textDidEndEditing: proposition. Des idées pourquoi? – Robert