0

Interface Builder에서 텍스트 필드를 만들고 NSNumberFormatter를 셀에 붙입니다. 그러나 사용자는 여전히 텍스트 필드에 텍스트를 입력 할 수 있습니다. 인터페이스 작성기를 사용하는 경우에만 입력을 숫자로 제한 할 수 있습니까? NSNumberFormatter의 포인트라고 생각했습니다.숫자 만 허용하도록 NSTextField를 강제 적용하려면 어떻게해야합니까?

- (BOOL) getObjectValue: (id*) object forString: (NSString*) string 
    errorDescription: (NSError**) error; 

이 모든 포맷에 대해 유효 :

+0

는 [비슷한 질문] (http://stackoverflow.com/questions/4652689/restrict-nstextfield-input-to-numeric-only-nsnumberformatter) – FluffulousChimp

+1

검색 "NSTextField있는 숫자 만"에 대한 허용 대답을 참조하십시오, 많은 답변을 찾을 수 있습니다. – rdelmar

답변

0

모든 포맷이 방법을 가지고있다.
문자열이 유효하지 않으면 false를 반환하고 인수 (dereferenced)로 전달 된 객체는 nil이됩니다.
텍스트 필드에 숫자 포맷터를 추가하는 대신 인스턴스 변수로 자신의 포맷터를 사용하십시오. 텍스트 변경시마다 사용자에게 통지 할 수 있도록 위임 프로토콜을 구현하는 텍스트 필드를 관찰하십시오. 성공이 false 인 경우이 시점에서

NSNumber* number; 
BOOL success=[formatter getObjectValue: &number forString: [myTextField stringValue] errorDescription:nil]; 

(또는 번호가 전무가 있는지 확인) 텍스트 필드에 잘못된 문자열이, 그래서 더 적합한 작업을 수행합니다
이 메소드를 호출 (아마도 전체 문자열을 삭제하거나 값으로 0.0을 표시하십시오).

이 또 다른 방법 :

- (BOOL) isPartialStringValid : (NSString*) partialString: (NSString*) partialString 
    errorDescription: (NSString*) error; 

부분 문자열이 과학적 표기법 "1E"와 valid.For의 예입니다 유효하지 않은 경우 당신이 알 수있는이 방법 만 부분적으로 유효 사용자가 수 있기 때문에 1을 추가하면 "1e1"이됩니다.

0

NSNumberFormatter 하위 클래스를 만들고 이것을 구현에 넣습니다. 코드에서 NSTextField/UITextField의 포맷터로 YKKNumberFormatter를 설정하십시오.

@implementation YKKNumberFormatter 

- (BOOL)isPartialStringValid:(NSString *)partialString newEditingString:(NSString **)newString errorDescription:(NSString **)error { 
    // Make sure we clear newString and error to ensure old values aren't being used 
    if (newString) { *newString = nil;} 
    if (error) {*error = nil;} 

    static NSCharacterSet *nonDecimalCharacters = nil; 
    if (nonDecimalCharacters == nil) { 
     nonDecimalCharacters = [[[NSCharacterSet decimalDigitCharacterSet] invertedSet] retain]; 
    } 

    if ([partialString length] == 0) { 
     return YES; // The empty string is okay (the user might just be deleting everything and starting over) 
    } else if ([partialString rangeOfCharacterFromSet:nonDecimalCharacters].location != NSNotFound) { 
     return NO; // Non-decimal characters aren't cool! 
    } 

    return YES; 
} 

@end 
관련 문제