몇 시간 동안 검색을 해왔지만 아직 답변을 찾지 못했습니다. 결과가 포함 된 메뉴를 표시하려면 어떻게해야합니까? NSSearchField
. 최근 검색 메뉴를 사용하여 결과를 표시 할 수 있지만 프로그래밍 방식으로 어떻게 메뉴를 표시합니까? 어떤 도움을 주셔서 감사합니다.NSSearchField 결과 메뉴
5
A
답변
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도 확인해야합니다.
1
애플은 some sample 코드가 필요합니다. 샘플 코드는 NSTextField (NSSearchField의 부모 클래스)를 사용합니다. 바라기를 이것은 당신의 문제를 해결합니다.
감사합니다. 완벽하게 작동합니다. 유일한 변경 사항은 이벤트의 위치 매개 변수를 수정하여 메뉴를 약 5 개 이동하여 검색 필드와 겹치지 않게하는 것입니다. 감사! – edc1591
나는 이것을 테스트하지는 않았지만 NSEvent 전체를'[NSEvent currentEvent]'로 바꿀 수는 있습니다. 아마 다음 기본 위치 등 가져옵니다. – Jef