2010-10-18 1 views
1

Je viens de remarquer un problème lorsque mon interface utilisateur est dans un certain état. J'ai une vue de table avec deux colonnes dans lesquelles l'utilisateur peut entrer des données qui seront utilisées plus tard. Il y a aussi un bouton qui agit sur le contenu de la vue de la table. Le problème est que si l'utilisateur a entré de nouvelles données dans la colonne mais n'a pas encore quitté le champ en utilisant la touche de tabulation ou la touche de retour (le curseur est toujours sur le terrain et en mode d'édition) et le bouton est pressé l'ancienne valeur est utilisée pas la valeur actuelle assis dans le champ.Comment puis-je forcer l'entrée dans un NSTextField à partir d'un NSButton?

Quelle est la meilleure façon de gérer cela? Je veux utiliser tout ce que l'utilisateur a entré jusqu'ici. Fondamentalement, le code du bouton doit indiquer au champ de texte pour terminer l'achèvement ou quitter le mode d'édition. Mais je ne peux pas sembler trouver une méthode qui fera cela.

Répondre

0

J'ai trouvé la réponse, Au moins pour moi.

Déterminez si une ligne est sélectionnée et si c'est le cas, désélectionnez-la. Cela provoque l'entrée en cours à être terminée.

- (void) completeTableEntry 
{ 
    // If a column is selected ensure it is completed 
    NSInteger sr = [keyValueTable selectedRow]; 
    if (sr != -1) { 
     [keyValueTable deselectRow:sr]; 
    } 
} 
+0

Je déteste les fixations, comme regarder dans un trou noir. – tgunr

2

Utiliser les liaisons. Dans Interface Builder, sélectionnez la colonne de table et, dans l'inspecteur, accédez à Liaisons de colonne de table et définissez la liaison de contenu Valeur de manière appropriée et vérifiez que l'option "Mises à jour permanentes" est cochée. Ensuite, les modifications apportées au contenu de la cellule du tableau se propagent immédiatement.

0

Que diriez-vous:

[theTargetWindowWhateverThatIs endEditingFor:nil]; 

theTargetWindowWhateverThatIs peut être, par exemple, self.window si vous êtes à l'intérieur d'un NSWindowController.