2012-04-10 2 views
0

스크롤 뷰 안에 필드 편집기 (NSTextField 용)를 삽입 한 경험이 있습니까? 편집하는 동안 NSTextField를 스크롤 가능하게하려고합니다.NSScrollView에 필드 편집기 포함하기

상황은 나는 시도했다 : 사용자 정의 필드 편집기의 -becomeFirstResponder가 호출 될 때

  1. 가 동적으로 포함. 이 반 작품; 문제는 그 NSTextField있는 더 이상 크기를 조정하지 도착 사용자 정의 필드 편집기를 편집하는 동안 크기가 조정됩니다 (그리고 나는이 필요 - 아코디언 스타일의 응용 프로그램을 만들 때)

  2. 는 NSScrollView 밖으로 "가장 한"필드 편집기를 만들기를 NSInvocation을 사용하여 메서드를 실제 대리 필드 편집기로 전달합니다. 이것이 내가 진정으로 희망하는 방법이다. 나는 나열된 모든 메서드를 구현했습니다 here; 필드 에디터가 실제로로드 될 때마다 EXC_BAD_ACCESS이 표시됩니다 (예 : [customTextField selectText:nil]). 좀비가 활성화되어 있어도 디버거에서 정보를 얻지 못하고 NSObjCMessageLoggingEnabled의 로그를 보면 아무것도 얻을 수 없습니다. 그것은 these guys처럼 작동하지만 7 년 전이었습니다.

마지막 리조트 (하나에게 자신을 작성하거나 대신 필드 편집기 메커니즘에 의존) 완전히 NSTextFields을 삭제하고 NSTextViews을 사용하는 것이나, 나는 단지 하나가 편집 될 데이터의 많은 행이 있기 때문에 한 번에, 나는 그들 중 하나 하나 하나 하나에 대해 NSTextView를 인스턴스화하고 싶지는 않지만, 아마도 그렇게 나쁘지는 않을 것이다.

답변

0

옵션 1을 사용하여 작업을 끝내기가 어려웠습니다. 옵션 2는 완전히 막 다른 골목이었습니다. 왜냐하면 EXC_BAD_ACCESS이 어디에나 튀어 나왔기 때문입니다.

내 사용자 정의 필드 편집기는 (사용자 정의) 스크롤 뷰에 대한 참조를 유지하여 (vvScrollView)에 포함시키고 뷰 계층 구조에 삽입합니다. 필드 편집기로 즉시 호출되는 스크롤 뷰, 내부를 내장 내 사용자 정의 필드 편집기 (를 NSTextView)을 내 코드는 먼저 응답자가되어 자동으로 뷰 계층에 삽입 :

- (void)embedSelfInScrollView { 
    NSView *realSuperview = [[self superview] superview]; 
    // [self superview] is some kind of private NSClipView class 
    if ([realSuperview isKindOfClass:[NSTextField class]]) { // the expected behavior: this may change? TODO make less prone to chance 
     [realSuperview addSubview:[self vvScrollView]]; // insert into view 
     [[self vvScrollView] setFrameSize:[realSuperview frame].size]; // se the initial size equivalent to control size so it can autoresize the same way 
     // add the scrollview into the view hierarchy 
     [[self vvScrollView] setDocumentView:self]; // removes self from previous superview 
    } 
} 

초기 문제 I 내가 편집하는 동안 NSTextField의 크기를 조정할 수 있기를 원하기 때문에 거의 모든 자동 크기 조정 옵션을 위반 한 필드 편집기 (NSClipView의 개인 클래스) 바로 위에있는 superview에 scrollview를 삽입하려고했습니다. 더 나아가서 개인 수업을 우회하는 것은 효과가있는 것처럼 보이지만 거의 자의적 인 것처럼 보입니다.