2011-11-11 1 views
5

몇 시간 동안 검색을 해왔지만 아직 답변을 찾지 못했습니다. 결과가 포함 된 메뉴를 표시하려면 어떻게해야합니까? NSSearchField. 최근 검색 메뉴를 사용하여 결과를 표시 할 수 있지만 프로그래밍 방식으로 어떻게 메뉴를 표시합니까? 어떤 도움을 주셔서 감사합니다.NSSearchField 결과 메뉴

답변

5

Apple은 개인적인 방법으로 Apple이이를 수행한다고 생각합니다. 어쩌면 NSMenu 대신 NSWindow을 사용했을 수도 있습니다. 이를 수행하는 한 가지 방법은 NSSearchField을 가리키는 IBOutlet을 가정하고 NSSearchField 대표자에게이 작업을 구현하는 것입니다.

- (void)controlTextDidEndEditing: (NSNotification *)aNotification 
{ 
    NSString *searchString = [searchField stringValue]; 

    NSMenu *menu = [[NSMenu alloc] initWithTitle: @"results"]; 

    [menu addItemWithTitle: searchString action: @selector(someAction:) keyEquivalent: @""]; 
    [menu addItemWithTitle: @"someString" action: @selector(someOtherAction:) keyEquivalent: @""]; 

    NSEvent *event = [NSEvent otherEventWithType: NSApplicationDefined 
             location: [searchField frame].origin 
            modifierFlags: 0 
             timestamp: 0 
            windowNumber: [[searchField window] windowNumber] 
              context: [[searchField window] graphicsContext] 
              subtype: NSApplicationDefined 
              data1: 0 
              data2: 0]; 

    [NSMenu popUpContextMenu: [menu autorelease] withEvent: event forView: searchField]; 
} 

메뉴를 표시하면 NSSearchField에 더 이상 입력 할 수 없습니다. 그래서 controlTextDidEndEditing:을 사용하고 controlTextDidChange:을 사용하지 않았습니다. 더 많은 사용자 정의 이벤트를 확인하려면 NSEvent's Class Reference도 확인해야합니다.

+0

감사합니다. 완벽하게 작동합니다. 유일한 변경 사항은 이벤트의 위치 매개 변수를 수정하여 메뉴를 약 5 개 이동하여 검색 필드와 겹치지 않게하는 것입니다. 감사! – edc1591

+0

나는 이것을 테스트하지는 않았지만 NSEvent 전체를'[NSEvent currentEvent]'로 바꿀 수는 있습니다. 아마 다음 기본 위치 등 가져옵니다. – Jef

1

애플은 some sample 코드가 필요합니다. 샘플 코드는 NSTextField (NSSearchField의 부모 클래스)를 사용합니다. 바라기를 이것은 당신의 문제를 해결합니다.