2010-12-05 2 views
2

NSTextField의 필드 편집기로 사용하려는 NSTextView가 있습니다.NSCell의 fieldEditorForView를 호출하는 방법 : 사용자 정의 필드 편집기를 할당하는 방법

사용자 정의 필드 편집기를 사용하지 않는 뷰에서 다른 NSTextFields이있을 것이기 때문에,하지만, 나는이를 호출하는 방법 주위에 내 머리를 포장 할 수 NSCell에의 방법

- (NSTextView *)fieldEditorForView:(NSView *)aControlView 

를 사용해야 보인다 사용중인 예제를 발견하지 못했습니다.

NSCell에의 문서

는 'aControlView가'이라고 말할 :

사용자 정의 필드 편집기를 필요로 세포를 포함하는보기.

내 두뇌가 말하는 것은 '이 NSTextField보기'를 의미하며 NSTextField는 NSView의 하위 클래스가 아닙니다. 그러나

NSView *viewTheTextFieldIsIn; 
CustomTextView *customTextView subclass of NSTextView (the field editor) 
NSTextField *textField 

:

[[textField cell] fieldEditorForView:customTextView]; 

이 때문에하지 viewForFieldEditor: ...하지만 NSCell에에 나에게 아무 의미가 없습니다.

누군가 내게 자비를 베풀고 나의 생각을 방해하지 않겠습니까?

+0

추가 정보 : 나는 텍스트 완성을 제공하기 위해 fieldEditor를 사용하고 있습니다. 이 클래스는 이것을 텍스트 뷰로 올바르게 제공하지만 한 줄짜리 텍스트 뷰는 NSTextField의 모양과 닮지 않습니다. 따라서 NSTextField의 필드 편집기로 사용하는 것이 더 좋은 아이디어였습니다. – lulu

답변

-1

지금 내가 이해하고 있다고 생각하는 아카이브에 대해이 질문에 대답하겠다고 생각했습니다. (수면은 무엇을 할 지 놀라운).

특정 메서드 호출의 사용은 할 수있다 :

CustomTextView *customTextView = (CustomTextView *)[[self.textField cell] fieldEditorForView:self.textField]; 
[customTextView doSomeOtherStuffWithIt]; 

customTextView는 윈도우의 대리자 메서드를 사용하여 fieldEditor로 사용할 수 있습니다 :

-(id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)client 

클라이언트가 텍스트 필드 일 수 있습니다.

그러면 textField에서 fieldEditorForView을 호출하면 해당 CustomTextView가 반환됩니다.

+0

제가 이해 하듯이, 당신은 당신 스스로 방법을 호출하지 않습니다. "이 필드는 자신의 사용자 정의 필드 편집기를 사용하도록 설계된 NSCell 하위 클래스의 재정의 포인트이며,이 메시지는 fieldEditor : forObject :의 NSWindow 메소드를 사용하여 aControlView의 선택된 셀로 전송됩니다." –

+1

또한 NSCell의 -fieldEditorForView 설명서는 "이 메서드에서 nil이 아닌 값을 반환하면 windowWillReturnFieldEditor : toObject : delegation을 포함한 프로세스를 쿼리하는 표준 필드 편집기를 건너 뛰고 있음을 나타냅니다." 즉, -fieldEditorForView를 구현하면 윈도우 위임 메서드가 호출되지 않습니다. –

+0

감사합니다, 프레스톤, 내 잘못 대답을 정리합니다. 이제 내가 할 수있는 일은 윈도우의 델리게이트 메소드를 사용하여 필드의 신원을 검사하고 다른 필드 에디터로 서브 클래스 화 된'NSTextView'를 반환하는 것입니다. 이게 효과가있는 것처럼 보입니다. – lulu