7
votes

Onglet dans Personnalisé Nstextfield ne met pas l'accent sur un autre contrôle

J'ai un nstextfield personnalisé, où je mettez en place des coins arrondis.

Appuyez sur la touche "TAB" N'EST PAS sur le prochain NSTextField (ou le contrôle sélectionnable) dans la fenêtre. Bizarre. Pourquoi cela ferait-il ça? Y a-t-il quelque chose de spécial que je dois ajouter pour activer l'application de passer par les autres commandes lorsque vous appuyez sur "Tab"?


7 commentaires

Faites-vous une forme de fenêtre dynamique ou de remplacement?


@trojanfoe, je fais remplacer le thrake the Drawrect: méthode et insérez mon propre code là-bas, qui s'appuie sur tout ce que l'interface utilisateur était dans le NstextField. Est-ce ce que vous voulez dire par fenêtre / remplacement de la fenêtre?


Non, je voulais dire, vous remplacez les vues dans la fenêtre; Le problème étant que vous devez dire à la fenêtre de recalculer la boucle de clé si vous le faites. Je pense que cela pourrait être une dup de Stackoverflow.com/Questtions/2217905/...


Je ne crois pas que je remplace des vues dans la fenêtre (aucun code qui ne suggérerait que), mais la situation semble être similaire à celle décrite dans ce type: I Appuyez sur Tab, le curseur devient invisible et appuyé sur onglet Encore une fois, vous sélectionnerez le texte entier dans le même nstextfield. J'ai essayé d'ajouter RecalculateKeyviewLoop dans Drawrect:, mais rien ne change.


Vous pouvez essayer de définir l'élément suivant à partir d'IB (c'est-à-dire définir explicitement la boucle de clé plutôt que de compter sur elle étant calculée). Supprimez également cet appel à RecalculatedyViewLoop .


@trojanfoe, toujours le même problème. tabbing va juste à l'extérieur puis à l'intérieur du nstextfield personnalisé


Hmmm, qui sonne comme si vous avez un autre contrôle autre dans la vue qui prend le premier statut de répondeur, mais vous ne pouvez pas le voir (caché, hors de la vue, etc.). Xcode vous avertit normalement des problèmes dans le XIB; Voyez-vous des avertissements? Aussi, vous pouvez regarder par la hiérarchie de vue dans les objets bit dans le volet de gauche de l'IB.


3 Réponses :


11
votes

Espérons que vous avez défini le constructeur d'interface de l'interface de Xcode, comme suit:

Définit NextkeyView d'un champ de texte à la suivante


2 commentaires

Il est toujours le même problème: la tabulation ne va pas à l'extérieur (ne se concentre pas dans un autre contrôle), puis à l'intérieur du nstextField personnalisé. NextkeyView fonctionne, comme les autres nstextFields sur l'onglet View in-Out correctement


Je me demande si la définition d'un point d'arrêt sur NextkeyView (ou SetNextCekeyView) dans le débogueur Xcode pourrait vous aider?



3
votes

Semble comme si c'était ma faute.

J'achète des appels de délégués dans la classe personnalisée pour TextDidbeginetiting: et TextDiDenting: , afin de maintenir le texte de l'espace réservé lorsque l'utilisateur onglets du champ, mais Je n'appelais pas aussi les méthodes respectives de super classe.

Après inclusion de l'appel à [Super Text TextDidententing ...] et [Super TextDidbeginetiting ...] Tabbing fonctionne bien.


1 commentaires

Hey! Cet article est super serviable. Ça marche pour moi. J'ai été googling pendant une heure ou plus pour pouvoir trouver ce post.



1
votes

Ma solution n'est pas une excellente, mais fonctionne:

Sous-classe NSTEXTVIEW P>

#import <Cocoa/Cocoa.h>

@interface NMTextView : NSTextView

@end


#import "NMTextView.h"

@implementation NMTextView

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"

- (void)keyDown:(NSEvent *)theEvent{

    switch ([theEvent keyCode]) {
        case 36:{
            if (([theEvent modifierFlags] & NSCommandKeyMask))
                //something for Ctrl+Enter
            else
                [super insertNewlineIgnoringFieldEditor:self];
        }break;

        case 48:
            //[self nextKeyView] = _NSClipViewOverhangView
            //[[self nextKeyView] nextKeyView] = NSTokenField (in my case)
            // or something different
            [[[self nextKeyView] nextKeyView] becomeFirstResponder];
            //also http://stackoverflow.com/a/3008622/1067147
        break;

        case 53:
            [_target performSelector:_actionEsc withObject:self];
        break;

        default:// allow NSTextView to handle everything else
            [super keyDown:theEvent];
        break;
    }
}

#pragma clang diagnostic pop

@end


0 commentaires