2013-05-21 1 views
2

SMPTE 타임 코드 값 (HH:MM:SS:FF)을 올바르게 표시하기 위해 서브 클래 싱을하고 내 자신의 사용자 정의 NSFormatter 및 NSTextField 클래스를 정의했습니다. 사용자가 fps 값에 대해 드롭 프레임을 사용하도록 선택하면 형식이 HH:MM:SS;FF (끝에 세미콜론)으로 바뀝니다. 마지막 장애물 하나를 제외하고는이 모든 것이 잘 작동합니다.포커스가 다시 그려지는 NSTextField를 만들려면 어떻게해야합니까?

형식을 변경할 때 포커스가있는 NSTextField는 포커스가 손실 될 때까지 디스플레이를 업데이트하지 않습니다. 여기에 스크린 샷이 설명하는 것입니다

Changing to drop-frame format

나는 형식이에게 display 메시지를 전송뿐만 아니라, 변경 될 때 NSTextField있는에게 setNeedsDisplay 메시지를 보내는 노력했다. 지금까지는 아무 것도 작동하지 않는 것처럼 보이고 포커스가있는 텍스트 필드는 포커스를 잃을 때까지 자체 업데이트/다시 그리기를 거부합니다.

이렇게하기 위해 내가해야 할 일이 있습니까?

+0

나는 그것과 관련이 있다고 생각했습니다. 나는 지난 몇 시간 동안 노력했지만, 나는 여전히 그것을 작동시킬 수없는 것처럼 보입니다. 'NSTextFieldCell' 개체를 얻을 수는 있지만 거기에서 필드 편집기에 액세스 할 수없는 것 같습니다. 'fieldEditorForView :'또는'fieldEditor : forObject :'를 보내면 "선택자에 응답하지 않습니다"오류가 발생합니다. 또한, 나는'drawWithFrame : inView :'를 시도했지만 NSTextFieldCell에 대해서는 주사위를 사용하지 않았다. 'setNeedsDisplayInRect : avoidAdditionalLayout :'이 유망 해 보이지만, 텍스트 상자의 NSTextView 인스턴스에 접근 할 수 없습니다. – Chris

+0

데이터 바인딩은 이후의 내용일까요? 이 경우이 Key-Value Observing 매뉴얼을 살펴 봐야합니다. 적어도 당신에게 검색 할 적절한 용어를 줄 것입니다. http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html – timquinn

+0

@Monolo 아니요, 셀로 보냈습니다. NSWindow 메서드라는 것을 알고 있지만 셀 수신기에 가능한 메시지로 표시되어 샷을 제공했습니다. :) – Chris

답변

1

지금이 문제를 해결할 수있었습니다. 해킹 비트 일지 모르지만 기본적으로 내가 수행 한 결과는 currentEditorNSTextField의 필드 편집기를 검색하여 형식이 변경 될 때 게시 된 알림이있는 개체로 전송하는 것이 었습니다.

필드 편집기를 사용하여 마지막으로 ":"을 ";"로 변경하려면 replaceCharactersInRange:withString:을 사용하십시오. 그 반대. 최적이 아닐지라도 완벽하게 작동합니다.

사실 나는 이것을 유용하게 생각하는 다른 사람들을 위해 github에 해결책을 게시했습니다. https://github.com/cfloisand/smpteformatter

관련 문제