2017-10-20 2 views
4

첫 번째 항목으로 텍스트 필드가있는 macOS 메뉴 모음 응용 프로그램을 만들려고합니다. 텍스트 필드는 그 아래에 표시 될 다른 항목을 필터링하기위한 검색 창으로 사용됩니다.1Password와 유사한 macOS 메뉴 모음 응용 프로그램 만들기

그것은 1password와 매우 유사합니다이 :

mine

내가 세 항목 Status menu 등을 작성하여이를 수행 한 :

1password

이 내가하고 관리하는 것입니다 메뉴의 첫 번째 항목에 대한 사용자 정의보기를 만듭니다.

그러나이 방법은 내 문제를 해결하지 못하는 것 같습니다. 검색 필드에 cmd + A을 누르면 포커스가 메뉴의 다음 항목으로 이동합니다. 이것이 NSMenu의 기본 동작입니다.

제 질문은 다음과 같습니다. 1Password와 유사한 앱을 만드는 것이 올바른 방법입니까 아니면 더 좋은 방법입니까?

답변

2

기본적으로 접근 방법이 정확합니다.

하지만 편집 키 이벤트를 명시 적으로 포착해야합니다. 서브 클래스 NSTextField 내가 서브 클래스`클래스 SearchField 만든 performKeyEquivalent

class AXCVTextField: NSTextField { 

    override func performKeyEquivalent(with event: NSEvent) -> Bool { 
     if event.modifierFlags.contains(.command) { 
      if let key = event.charactersIgnoringModifiers { 
       var action : String? 
       switch key { 
       case "x": action = "cut:" 
       case "c": action = "copy:" 
       case "v": action = "paste:" 
       case "a": action = "selectAll:" 
       default: 
        break 
       } 
       if action != nil { 
        return NSApp.sendAction(Selector(action!), to:self.window!.firstResponder, from:self) 
       } 
      } 
     } 
     return super.performKeyEquivalent(with: event) 
    } 
} 
+0

오버라이드 (override) : {...} NSTextField있는'를하고 NSTextField'의 클래스'로 설정합니다. 그러나,이 메소드는'cmd + A '를 누르면 트리거되지 않습니다. 또한, 나는 때로는 응용 프로그램을 실행할 때 입력을 클릭 할 수 없다는 것을 깨달았다. 응답이 없지만 다른 NSMenuItem이 제대로 작동합니다. –

+0

물론 텍스트 필드가 키 이벤트를 받기 위해 응답 체인에 있다는보기를 디자인해야합니다. – vadian

+0

좀 더 자세히 설명해 주실 분? 검색하는 데 문제가 있습니다. –

관련 문제