1

응용 프로그램에서 NSDocument (NSPersistentDocument)를 기반으로 응용 프로그램을 만들었으므로 둘 이상의 문서를 (보통) 만들 수 있습니다.NSDocument 기반 응용 프로그램 및 NSToolbar

기본 문서 창 (NSPersistentDocument 기준)에는 IB가 추가되었습니다. 코드에서 도구 모음 항목 (NSToolbarItems)에 insertItemWithItemIdentifier- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag 메서드를 사용하여 추가합니다.

코드 샘플 : 난 단지 하나 개의 문서 열 때까지

[_toolbar insertItemWithItemIdentifier:@"addTape" atIndex:2]; 

- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag { 
    NSToolbarItem *item =nil; 

    if ([itemIdentifier isEqual:@"addTape"]) { 
     item = [[NSToolbarItem alloc] initWithItemIdentifier: itemIdentifier]; 
     item.label = NSLocalizedString(@"Add Tape",@"Add Tape"); 
     item.paletteLabel = NSLocalizedString(@"Add Tape",@"Add Tape"); 
     item.toolTip = NSLocalizedString(@"Adds new tape",@"Adds new tape"); 
     item.image = [NSImage imageNamed:@"NSAddTemplate"]; 
     item.target = self; 
     item.action = @selector(addTape:); 
     item.tag = 101;   
    } 
} 

모든 것이 올바른 것입니다. 첫 번째 문서 창에서 두 번째 문서를 열거 나 새 문서를 만들 때 툴바 항목이 두 배가됩니다 (세 번째 문서를 연 다음 항목이 첫 번째 창에서 세 배로 증가하고 두 번째로 두 배로 늘어남 등).

편집 : 도구 상자 항목을 추가 할 때마다 각 창마다 itemForItemIdentifier이 호출됩니다. 예 : 두 개의 창 (두 개의 문서가 열려있는 경우)과 하나의 버튼을 추가하려고 시도하면 itemForItemIdentifier이 두 번 호출됩니다.
모든 문서에는이 문서에만 설정된 대리인이 포함 된 고유 한 도구 모음이 있으므로 저에게 이상합니다.

내가 잘못했는지 전혀 알지 못합니다. 어쩌면 누군가 내가 실수 한 부분을 지적 할 것입니다.

답변

1

발견 된 솔루션 :이 툴바를 만든 각 툴바에 동일한 식별자가 있으므로 펜촉에서 작성한 툴바를 사용할 수 없습니다. 다른 식별자를 사용하여 코드에서 도구 모음을 만들 때 문제가 발생했습니다.

1

일반적으로 툴바 항목을 직접 삽입하지 마십시오. 대리자 메서드 toolbarAllowedItemIdentifiers:toolbarDefaultItemIdentifiers:을 구현하면 해당 목록에 따라 도구 모음이 초기화됩니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 나를위한 옵션이 아니므로 툴바 항목을 제어해야합니다. 하지만 해결책을 찾았습니다. –

+0

나는 위의 솔루션을 사용하여 끝났다. 플러그인이 툴바 항목을 추가하도록 허용합니다. 이를 허용하기 위해 insertItemWithItemIdentifier는 각각의 새 도구 모음 항목에 대해 한 번만 호출되고 각 문서의 대리자 메서드는 동일한 반환 값을 갖기 때문에 추가 한 nstoolbaritems를 기억하는 싱글 톤을 유지했습니다 (위임 메서드의 반환 값). 식별자 목록. 툴바 : itemForItemIdentifier 위임 메소드는 툴바에 추가되는 항목의 복사본을 생성하므로 여기에 올바른 문서의 액션과 대상을 설정할 수 있으며 다른 사용자를 재정의하지 않습니다. –

관련 문제