2012-03-03 2 views
1

NSSavePanel에는 형식 팝업 메뉴가 포함 된 액세서리보기 및 선택한 형식과 관련된 다양한 옵션이있는 탭없는 탭보기가 설정되어 있습니다. 패널에 올바르게 표시되지만 크기를 조정할 수 없습니다.NSSavePanel의 액세서리보기 조작보기?

accessoryView에서 -setFrameSize를 호출하면 홀수 및 부정확 한 크기 조정이 발생하고 이후의 모든 호출에 대해 응답이 없습니다. 뷰 평면의 다른 컨트롤은 모든 호출에 응답하지 않습니다.

NSSavePanel은 지정된 메뉴 만 템플릿으로 사용하는 NSSearchField처럼 작동합니까? 그렇다면 현재 활성 저장 패널에서 액세서리보기의 특정 인스턴스를 어떻게 조작 할 수 있습니까?

+0

xib 파일보다는 코드로 accessoryView를 만드는 것처럼 들립니다. 그렇다면 xib 파일 접근 방식을 시도해보십시오. 또한 "할당 된 메뉴를 템플릿으로 사용"한다는 것은 무엇을 의미합니까? –

+0

아니요, accessoryView는 내 주요 xib 파일에 있습니다. 두 번째 비트의 경우 NSSearchFields는 템플릿으로 제공 한 NSMenu를 사용하고 런타임에 복사본을 사용합니다. 즉 원본 대신 복사본을 수정해야합니다. –

+0

그렇다면 왜 코드에서 -setFrameSize를 수행해야합니까? 이미 xib에 설정되어 있지 않습니까? –

답변

1

NSSavePanel에 대한 accessoryView의 크기를 처리하기 위해 (제거하지 않고 nil로 설정) 다시 추가해야한다는 경험이있었습니다 (특히 10.5에서 실행해야하는 코드). 10.7 이하 (10.6)는 frameSize를 변경 한 후 [savePanel layoutIfNecessary]으로 전화하면 충분합니다.

이 경우 보이지 않는 탭보기를 사용한다고 언급 했으므로 일반적으로 탭보기의 크기는 일정합니다. 다양한 하위 뷰의 내용을 기반으로 NSSavePanel의 크기를 조정하려는 경우 NSSavePanel에서 NSVavePanel을 동일한 뷰 또는 다른 NIB 파일의 개별 뷰로 유지하고 하위 뷰로로드 할 수 있습니다.

팝업 메뉴가 포함 된 하나의 전체보기를 사용한 플러그 - 인 모듈의 디스크 목록에서 NIB가 동적으로로드 된 다음 성공적으로이 작업을 수행했습니다. -setFrameSize:을 사용하여 하위보기를 추가하기 전에이를 변경해야합니다. 그런 다음 addSubview:을 사용하여 기존보기에 하위보기를 추가하고 크기를 변경하고 하위보기를 추가 한 후 [savePanel layoutIfNecessary]을 호출했습니다. 의

NSSize currentSize = [exportFormatOptionsView bounds].size; 
    NSView *newView = [exportAccessoryViewController view]; 
    NSSize newSize = NSMakeSize(currentSize.width, currentSize.height+[newView bounds].size.height); 
    // resize the parent view 
    [exportFormatOptionsView setFrameSize: newSize]; 
    // move the child view 
    [exportFormatOptionsView addSubview: newView]; 

: 여기

는 (팝업 메뉴를 포함) 기존 exportFormatOptionsView보기에 (우리를 위해이 팝업 메뉴의 선택에 따라 어떤 변화 임) exportAccessoryViewController를 추가하는 네 가지의 조각입니다 물론 이것을 동적으로 전환 할 때 중간보기의보기 크기를 원래 크기로 다시 변경해야하므로 나중에 이렇게 보았던 보조보기를 추가 할 수 있습니다.

NSSize currentSize = [exportFormatOptionsView bounds].size; 
    NSView *oldView = [exportAccessoryViewController view]; 

    // pull it out 
    [oldView removeFromSuperview]; 
    NSSize newSize = NSMakeSize(currentSize.width, currentSize.height-[oldView bounds].size.height); 
    [exportFormatOptionsView setFrameSize: newSize]; 
    exportAccessoryViewController = nil; 

희망 도움이됩니다.

관련 문제