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;
희망 도움이됩니다.
xib 파일보다는 코드로 accessoryView를 만드는 것처럼 들립니다. 그렇다면 xib 파일 접근 방식을 시도해보십시오. 또한 "할당 된 메뉴를 템플릿으로 사용"한다는 것은 무엇을 의미합니까? –
아니요, accessoryView는 내 주요 xib 파일에 있습니다. 두 번째 비트의 경우 NSSearchFields는 템플릿으로 제공 한 NSMenu를 사용하고 런타임에 복사본을 사용합니다. 즉 원본 대신 복사본을 수정해야합니다. –
그렇다면 왜 코드에서 -setFrameSize를 수행해야합니까? 이미 xib에 설정되어 있지 않습니까? –