2009-11-29 68 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];