2012-11-01 2 views
1

Je suis un débutant dans le développement OSx. J'ai une application Cocoa qui utilise un Webview. Tout fonctionne bien, sauf pour le champ de texte dans le webview. Je sais comment activer les séquences de touches dans NSTextField, mais pas celles dans le Webview. J'ai cherché sur le web toute la journée, mais sans chance. J'ai vraiment besoin d'aide sur la façon d'activer les séquences de touches pour implémenter les touches de raccourci clavier.Cocoa webview textfield n'accepte pas les frappes

Exemple:

copie -> commande + c

pâte -> commande + v

cut -> commande + x

Toute aide serait très apprécié.

+0

Pour mettre en œuvre les touches de raccourci du clavier? Si vous n'avez rien édité dans votre projet, il devrait être présent par défaut. – TheAmateurProgrammer

+0

Merci pour la réponse @TheAmateurProgrammer. Tout ce que je devais faire était d'implémenter le - (BOOL) performKeyEquivalent: function – Kimpoy

Répondre

1

J'ai eu la réponse maintenant. J'ai réalisé que j'ai oublié d'implémenter

- (BOOL)performKeyEquivalent:(NSEvent *)theEvent 

à la classe qui gère le Webview.

+0

Pourriez-vous partager avec nous le code utilisé pour accomplir cela? Je voudrais aussi activer les raccourcis dans une petite application que j'ai faite. Merci – acido

0

@Kimpoy, merci pour la référence à performKeyequivalent! Pour être complet, je mis en œuvre cette façon ...

Sous votre WebView de WebView et mettre en œuvre la méthode:

- (BOOL)performKeyEquivalent:(NSEvent *)theEvent { 

    NSString * chars = [theEvent characters]; 
    BOOL status = NO; 

    if ([theEvent modifierFlags] & NSCommandKeyMask){ 

     if ([chars isEqualTo:@"a"]){ 
      [self selectAll:nil]; 
      status = YES; 
     } 

     if ([chars isEqualTo:@"c"]){ 
      [self copy:nil]; 
      status = YES; 
     } 

     if ([chars isEqualTo:@"v"]){ 
      [self paste:nil]; 
      status = YES; 
     } 

     if ([chars isEqualTo:@"x"]){ 
      [self cut:nil]; 
      status = YES; 
     } 
    } 

    if (status) 
     return YES; 

    return [super performKeyEquivalent:theEvent]; 
} 

Crédit @aventurella ici: https://github.com/Beats-Music/mac-miniplayer/issues/3. Juste légèrement modifié pour renvoyer la super réponse par défaut car elle devrait se propager jusqu'à ses sous-vues.

Comme note, je recommande la mise en œuvre d'un journal ou similaire dans votre WebView personnalisé pour vous assurer que vous travaillez vraiment avec votre classe:

- (void)drawRect:(NSRect)dirtyRect { 
    [super drawRect:dirtyRect]; 

    // Drawing code here. 

    NSLog(@"Custom webview running..."); 
}