2009-11-29 65 views
2

嗨,我正在製作一個程序,從鍵盤獲取輸入,我想知道是否有任何方法從鍵盤獲取輸入並將其存儲在NSString對象中。如何從Objective-C中的鍵盤讀取輸入

+0

什麼樣的程序?大概不是傳統的GUI,因爲這些字段處理他們自己的輸入。控制檯應用程序?或者與鍵盤快捷鍵的工具,一個Photoshop?一個遊戲? – 2009-11-29 23:01:24

回答

6

如果你正在做的這是一個命令行應用程序,那麼這裏的代碼,我上週寫來從命令提示符下一條線(我做了一個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; 
} 

然後我倒是這樣使用它:

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

它不處理Unicode字符非常好(儘管使用單字符),因爲getchar函數()只返回一個普通字符。但是,對於基本的命令行文本輸入,它工作得很好。但是,需要警告的是,這會阻止執行它的線程(因爲getchar()是阻塞調用)。

+0

爲什麼objective-c沒有像c中的掃描一樣使用本地語句? – innuendoreplay 2012-07-12 04:39:09

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

爲什麼不呢?

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