문제

안녕하세요 저는 키보드에서 입력을받는 프로그램을 만들고 있으며 키보드에서 입력 할 수있는 방법이 있는지 궁금합니다. NSString 물체.

도움이 되었습니까?

해결책

당신이 이것을 명령 줄 앱으로하고 있다면, 지난 주에 내가 쓴 코드는 명령 프롬프트에서 줄을 얻습니다 (나는 그것을 만들었습니다. 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]];

getchar ()는 일반 숯 만 반환하기 때문에 유니 코드 문자를 잘 처리하지 않습니다 (UNICHAR 사용에도 불구하고). 그러나 기본 명령 줄 텍스트 항목의 경우 꽤 잘 작동합니다. 그러나 이것이 실행 된 스레드를 차단할 것이라는 경고를받습니다 (getchar ()가 차단 호출이기 때문에).

다른 팁

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

왜 이거 그렇지 않습니까?

NSFileHandle *kbd = [NSFileHandle fileHandleWithStandardInput];
NSData *inputData = [kbd availableData];
NSString *option = [[NSString alloc] initWithData:inputData encoding:NSUTF8StringEncoding];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top