2012-02-20 5 views
0

OS X 응용 프로그램에서 NSFormatter를 재정의하는 클래스를 사용하려고합니다. 나는 책에서 예제를 시도했지만 Xcode의 이전 버전에서 나온 것입니다. 내 문제는 내 NSTextfield의 포맷터를 설정하는 방법을 모르겠다. Xcoded가 내장 된 IB를 가지고 있거나 뭔가 다른 일을하고있는 상황이 바뀌 었는지 확실하지 않습니다. 당신이 당신의 텍스트 필드를 클릭하는 것을 제어 할 수있는 것처럼 보이면 그것은 메뉴를 불러올 것입니다. 메뉴의 아울렛 섹션에서 "포맷터"선택을 볼 것이라고 말합니다. 그 메뉴의 내 콘센트 섹션에 나열되지 않습니다.XFormat 4의 텍스트 필드 용 사용자 지정 NSFormatter

차이가 있다고 생각하지 않지만 내 NSTextfield는 NSScrollview에 있습니다. 나는 여전히 Cocoa (C# 및 C++ 배경에서 온)에 대해 매우 익숙합니다.

+0

NSTextField에서 NSFormatter로 제한하려는 것은 무엇입니까? –

+0

난 그냥 nstextfield에 입력 할 수있는 문자의 수를 제한하려하고있어 – JonF

답변

1

당신은 단순히 다음과 같이 NSNumberFormatter를 서브 클래 싱 할 수 있습니다

에서 .H

@interface NumberFormatterSubclass : NSNumberFormatter { 

} 

@end 

에서하는 .m

@implementation NumberFormatterSubclass 


- (BOOL)isPartialStringValid:(NSString **)partialString 
    proposedSelectedRange:(NSRangePointer)proposedSelRange 
      originalString:(NSString *)origString 
    originalSelectedRange:(NSRange)origSelRange 
     errorDescription:(NSString **)error 
{ 

    if ([*partialString length] > 4) { 
     return NO; 
    } 


    return YES; 
} 

NSNumberFormatter를 추가하는 것을 잊지 마세요 귀하의 NSTextField 및 변경 신원 검사기에서 귀하의 생성 된 하위 클래스에 NSBumberFormatter 클래스를 변경하십시오.

+0

제안 주셔서 감사하지만 텍스트 필드가 숫자로 제한되지 않습니다. 나는이 솔루션이 포매터 클래스를 생성하는 것을 발견했다. http://stackoverflow.com/questions/827014/how-to-limit-nstextfield-text-length-and-keep-it-always-upper-case. 난 그냥 nstextfield 어떤 포맷터에 연결하는 방법을 찾을 수 없습니다 – JonF

+0

그것은 숫자를 제한 아니에요 .. 그것은 문자와 숫자를 제한하고있어. 그것은 4 개의 기호 문자 또는 숫자로 제한됩니다. 그리고 포매터를 NSTextField로 드래그하여 연결할 수 있습니다. 그리고 포스터를 ID 검사기의 작성된 하위 클래스로 변경하여 포스트 얼레라고 말한 것입니다. 또한 "NSNumberFormatter"가 "NSFormatter"를 사용하는 것과 같은 소리를내는 것이 마음에 들지 않는 경우, 내 writed 코드가 작동합니다! –

+1

NSFormatter를 서브 클래 싱하는 경우 다음 메소드도 구현해야합니다. stringForObjectValue : 및 getObjectValue : forString : errorDescription : "사용자 정의 포맷터 만들기"참조 https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DataFormatting /Articles/CreatingACustomFormatter.html#//apple_ref/doc/uid/20000196 – ctpenrose