두 개의 NSButton과 NSTextField가있는 창이 여러보기 및 여러 다른 컨트롤과 함께 있습니다. 두 개의 NSButton 각각에 오른쪽 및 왼쪽 화살표 키를 할당합니다. 두 개의 버튼은 오른쪽 및 왼쪽 화살표 키에 응답합니다. 그러나 NSTextField에서 화살표 키를 텍스트 필드에서 일반적으로 수행하고 NSButton을 트리거하지 않도록 수행해야합니다. 나는 Cocoa Key Handling 문서와 키 이벤트에 관한 다른 질문을 읽으려고 시도했지만, 하나의 컨트롤에서 키 동등한 동작을 변경하려는 예제를 찾을 수 없었습니다. NSTextField 서브 클래스를 시도했지만 화살표 키를 트랩 할 수 없습니다. 이것이 어떻게 구현 될 수 있는가?NSTextField의 NSButton에 대한 키 대체 정의
2
A
답변
1
becomeFirstResponder :를 재정의하고 구현에서 setKeyEquivalent :를 호출 할 수 있습니다. 버튼이 첫 번째 응답자 상태를 잃을 때 해당 키를 제거하려면 resignFirstResponder :를 재정의하십시오.
첫 번째 응답자 상태가 버튼의 해당 항목에 영향을 미치기를 원하는 컨트롤에서이 작업을 수행하십시오. 예를 들어, 컨테이너로보기가 있고 첫 번째 응답자가 될 수 있다면 firstFirstResponder : (super 호출)을 재정의 한 다음 거기에 해당하는 버튼을 관리합니다. 이 주제를 아직 이해하지 못했다면 여기서는 간단한 대답을 할 수 없기 때문에 많은 사전 지식이 있습니다.
0
당신은 NSButton
를 서브 클래 싱과 같이 performKeyEquivalent:
을 무시할 수 있습니다 : 첫 번째 응답자가 텍스트 필드 /보기 경우
override func performKeyEquivalent(event: NSEvent) -> Bool {
guard
let window = window where window.firstResponder.isKindOfClass(NSText.self) == false
else {
return false
}
return super.performKeyEquivalent(event)
}
이 본질적으로 해당하는 키를 비활성화합니다.
네, 답은 올바른 길에 놓았고 제대로 작동합니다. –