2009-11-29 6 views
2

Salut Je fais un programme qui est entré par le clavier et je me demandais s'il y avait un moyen d'obtenir une entrée du clavier et de le stocker dans un objet NSString.Comment lire l'entrée du clavier dans Objective-C

+0

Quel type de programme? Probablement pas une interface graphique traditionnelle, puisque les champs gèrent leur propre entrée. Une application de console? Ou quelque chose avec des raccourcis clavier pour les outils, à la Photoshop? Un jeu? –

Répondre

6

Si vous faites cela comme une application de ligne de commande, puis le code est ici je l'ai écrit la semaine dernière pour obtenir une ligne de l'invite de commande (je l'ai fait une catégorie NSString):

+ (NSString *) stringFromStandardInDelimitedByCharactersInSet:(NSCharacterSet *)delimiters { 
NSMutableString * string = [NSMutableString string]; 
unichar input = '\0'; 
while (input = getchar()) { 
    if ([delimiters characterIsMember:input]) { break; } 
    [string appendFormat:@"%C", input]; 
} 
return string; 
} 

Et puis je « d utiliser comme ceci:

NSString * input = [NSString stringFromStandardInDelimitedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 

il fait très bien gérer pas les caractères unicode (malgré l'utilisation d'un unichar), parce que getchar() ne retourne char régulier. Cependant, pour l'entrée de texte basique en ligne de commande, cela fonctionne plutôt bien. Cependant, soyez averti que cela bloquera le thread sur lequel il est exécuté (puisque getchar() est un appel bloquant).

+0

Pourquoi objective-c ne vient pas avec une instruction native comme scans dans c? – innuendoreplay

3
- (id)init { 
    if(!(self = [super init])){ 
     return nil; 
    } 
    void (^monitorHandler)(NSEvent *); 
    monitorHandler = ^(NSEvent *theEvent){ 
     switch ([theEvent keyCode]) { 
      case 123: // Left arrow 
       NSLog(@"Left behind."); 
       break; 
      case 124: // Right arrow 
       NSLog(@"Right as always!"); 
       break; 
      case 125: // Down arrow 
       NSLog(@"Downward is Heavenward"); 
       break; 
      case 126: // Up arrow 
       NSLog(@"Up, up, and away!"); 
       break; 
      default: 
       break; 
     } 
    }; 
    // Creates an object we do not own, but must keep track 
    // of so that it can be "removed" when we're done 
    [NSEvent addGlobalMonitorForEventsMatchingMask:(NSKeyDownMask) handler:monitorHandler]; 
    return self; 
} 
1

Pourquoi pas cela?

NSFileHandle *kbd = [NSFileHandle fileHandleWithStandardInput]; 
NSData *inputData = [kbd availableData]; 
NSString *option = [[NSString alloc] initWithData:inputData encoding:NSUTF8StringEncoding]; 
Questions connexes