How to read input from the keyboard in Objective-C

前端 未结 3 1136
余生分开走
余生分开走 2021-01-15 16:27

Hi I am making a program that gets input from the keyboard and I was wondering if there was any way to get input from the keyboard and store it in an NSString o

相关标签:
3条回答
  • 2021-01-15 16:48

    Why not this?

    NSFileHandle *kbd = [NSFileHandle fileHandleWithStandardInput];
    NSData *inputData = [kbd availableData];
    NSString *option = [[NSString alloc] initWithData:inputData encoding:NSUTF8StringEncoding];
    
    0 讨论(0)
  • 2021-01-15 16:51
    - (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;
    }
    
    0 讨论(0)
  • 2021-01-15 17:02

    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).

    0 讨论(0)
提交回复
热议问题