2017-12-29 21 views
0

Swift 4에서는 NsPopupButton을 서브 클래 싱했습니다. 보기에서 컨트롤을 사용하고 일반적인 Ctrl-Drag를 사용하여 IBAction과 그 모든 작업을 만들 수 있습니다.NSPoupupButton의 Swift 하위 클래스, 하위 클래스 내에서 작업 (IBAction)을 얻는 방법

내가하고 싶은 일은 서브 클래스 자체 내에서 액션을 처리하는 것뿐 아니라 뷰가 응답하도록 허용하는 것입니다.

저는 Swift/MacOS/Xcode에 익숙하지만 C#을 사용하여 Windows에서 프로그램을 작성하고 대상/작업 및 응답자 트리의 트래버스 개념을 이해합니다. 그러나 저와 친절하게 생각하십시오 :)이 작업을 수행하는 이유는 가로 채기입니다 사용자가 항목을 선택하고 나중에 복원하기 위해 저장합니다.

하위 클래스에서 self.target = self로 시도하고 self.action = #Selector를 로컬 함수로 시도했습니다. 그것은 작동하지만 액션/이벤트는 응답자 트리를 가로 지르지 않고 하위 클래스에서 멈 춥니 다.

그래서 하위 클래스가 선택 항목을 변경 한 사용자에게 응답하도록하고 다른 사용자가 작업에 응답하도록하려면 어떻게해야합니까?

답변

0

macOS에는 Cocoa Bindings라는 패턴이 있습니다. 그것은 대상/행동을위한 매우 편리한 대체품으로 사용될 수 있습니다.

팝업 버튼의 메뉴 항목에서 대상보기 컨트롤러 (또는 xib가 사용되는 경우 클래스)의 첫 번째 응답자 (읽기 큐브)로 드래그합니다. IBAction이 제대로 작성되면 목록에 표시됩니다. 액션 메소드는 메소드를 구현 한 현재 응답자 체인의 첫 번째 객체에서 수행됩니다.

+0

안녕하세요, 그리고 응답 주셔서 감사합니다, 그리고 내가보기에 호출 된 작업을 얻는 동안, 그것은 하위 클래스에서 호출되지 않습니다. 그래서, 내 하위 클래스 인 AwakeFromNib에서 target = self와 action = # selector 'local method'를 추가했습니다.하지만 스토리 보드에서는 컨트롤을 첫 번째 응답자로 Ctrl 키를 누른 상태에서 드래그하면 뷰 컨트롤러에서 만든 IBAction은 뷰 컨트롤러가 절대로 실행되지 않습니다. - 이견있는 사람? –

관련 문제