How to read input from the keyboard in Objective-C

戏子无情 提交于 2019-12-01 10:32:59

If you are doing this as a command-line app, then here's code I wrote last week to get a line from the command prompt (I made it an NSString category):

+ (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;
}

And then I'd use it like this:

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

It doesn't handle unicode characters very well (despite using a unichar), because getchar() only returns a regular char. However, for basic command-line text entry, it works pretty well. However, be warned that this will block the thread on which it's executed (since getchar() is a blocking call).

Robby
- (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;
}

Why not this?

NSFileHandle *kbd = [NSFileHandle fileHandleWithStandardInput];
NSData *inputData = [kbd availableData];
NSString *option = [[NSString alloc] initWithData:inputData encoding:NSUTF8StringEncoding];
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!