2012-10-29 3 views
0

NSTextField의 포맷터 출력을 사용하여 NSNumberFormatter를 NSTextfield에 연결하려고합니다 (아래 그림 참조). 나는이 프로그램을 실행할 때 나는 오류를 얻을NSTextfield에 NSNumberFormatter 연결

#import <Foundation/Foundation.h> 

@interface FieldFormatter : NSNumberFormatter 

@end 

#import "FieldFormatter.h" 

@implementation FieldFormatter 

- (NSNumberFormatterBehavior)formatterBehavior { 
    return NSNumberFormatterBehavior10_4; 
} 

- (NSNumberFormatterStyle)numberStyle { 
    return NSNumberFormatterDecimalStyle; 
} 

@end 

enter image description here

하지만 포맷터가 정상적으로 작동하지 않는 경우 다음과 같이 내 포맷터 서브 클래스입니다. 텍스트 입력란에 십진수를 입력하면 13.8이 14가됩니다. 텍스트 입력란에는 십진수를 입력 할 수 없습니다.

인터페이스 빌더에서 NSTextField with NSNumberFormatter을 사용할 때 올바르게 작동하도록 할 수 있습니다. 하지만 코드를 통해이 작업을 수행하여 형식을 더 잘 제어 할 수 있습니다.

그래서 내가하려는 것은 - 하위 클래스 NSNumberFormatter는 XIB의 텍스트 필드에 포맷터를 연결 한 다음 사용자가 숫자가 지정된 텍스트 필드에 숫자를 입력 한 후입니다.

어떤 제안이 도움이 될 것입니다.

+0

IB에서 필드 포맷터의 맞춤 클래스를 변경 했습니까? –

+0

@GradyPlayer FieldFormatter는 NSNumberFormatter의 서브 클래스입니다. IB의 객체 클래스는 FieldFormatter로 설정됩니다. 네가 물어 본거야? – wigging

+0

형식 메서드를 재정의하지 않으면 어떻게 작동하지 않는다고 말할 수 있는지 이해할 수 없습니다 ... 아마도 문제는 코드에서 formatterStyle을 재정의하지만 IB에서는 그렇지 않은 것일 수 있습니다. 그걸 기반으로 다른 키를 deserialze ...하지만 부모 클래스처럼 행동해야하는 객체가 있습니다. –

답변

2

Alloc 형식화 프로그램을 초기화 한 다음 텍스트 필드에서 setFormatter :를 호출하면됩니다. 당신이 IB에서와 아무것도하지 않는 경우

FieldFormatter *formatter = [[FieldFormatter alloc] init]; 
[myTextField setFormatter:formatter]; 

그리고, 해당 연결하고 FieldFormatter 인스턴스를 나타내는 파란색 큐브를 제거 얻어야한다.

+0

그러나 파란색 큐브 개체를 제거하면 텍스트 필드를 내 FieldFormatter 클래스에 어떻게 연결합니까? – wigging

+0

또한, NSNumberFormatter를 사용하기위한'alloc init' 예제를 보았습니다.하지만 실제로 코드를 넣을 위치를 알려주지는 않았습니다. 나는 포매터를 할당하고 초기화하는 방법과 매개 변수를 설정하는 방법을 이해하지만 코드는 어디에 속하는가? 델리게이트의 메소드에서, 어디에서? – wigging

+0

@Gavin, 포맷터를 초기화하는 코드는 텍스트 필드에 IBAction이있는 모든 클래스 (FormFormatter.h를 해당 파일로 가져 오는 것을 잊지 마십시오)에 있어야합니다. 그렇지 않으면 applicationWillFinishLaunching 메소드 안에 넣을 수 있습니다. 애플 리케이션 대리인. 연결하는 한, setFormatter : 메소드가하는 것처럼 IBOutlet을 텍스트 필드로 사용하는 것 외에는 IB에서 아무 것도 할 필요가 없습니다. – rdelmar

관련 문제