2014-02-28 5 views
4

나는 사용자가이 NSTextField 편집 할 때 세 가지 키 조합을 처리 할 수 ​​있도록하려면 다르게 대답했다.NSTextField에서 <Return> + 수정 자 키를 올바르게 처리하는 방법은 무엇입니까?</p> <ul> <li>↩</li> <li>⌘↩</li> <li>⇧↩</li> </ul> <p>이 조합의 각이 될 것입니다 :

이상적으로는 IB만으로이 목표를 달성하고 싶습니다. 그러나, 나의 이해는 Cocoa가 컨트롤 하나당 하나의 액션 만 허용한다는 것이다.

IBAction에이 보낸 작업을 바인딩하고 NSTextField을 반환 키를 누를 때만 보내도록 설정할 수 있지만 현재 동작중인 수정 자 키를 가져 오는 방법을 찾을 수 없습니다 이벤트 객체가 아닌 (id)sender을받습니다. 그게 가능하니?

또는 NSTextField의 하위 클래스를 지정하고 keyDown:을 재정의하고 수동으로 적절한 작업을 실행하는 것이 좋습니다. 그러나, 나는 이것을 IB에서 올바르게 연결하는 방법을 생각할 수 없다. (대상에 IBOutlet을 사용할 수는 있지만 특정 방법을 연결하는 방법을 생각할 수 없습니다.) 또한이 접근법의 효율성에 대해 걱정하고 있습니다.

NSTextField에서 특정 키 이벤트를 처리하는 일반적인 방법은 무엇입니까?


나는 사용자 정의 프로토콜을 작성하고 텍스트 필드의 서브 클래스에 출구를 가하고 순간에쪽으로 기울고 있어요 접근 :

@property (weak, nonatomic) IBOutlet id<TextFieldReturnHandler> target 

다음 키를 누를 때 이벤트에서 호출 할 수 있습니다. 그래도 정말 복잡하게 보입니다.

- (IBAction)cellDidEndEditing:(id)sender; 

만이 방법은 예를 들어, 리턴 키를 누를 때 호출, 그리고 싶은 경우, 사용자가 클릭 :

답변

1

당신은 당신의 컨트롤러 방법까지 전송 된 조치를 연결할 수 있습니다 IB에서 NSTextField의 Action 속성을 'Send On End Editing'대신 'Enter Only On Only'로 설정할 수 있습니다. 이 방법 내에서

, 당신과 함께 이벤트에 액세스 할 수 있습니다 이벤트가 유효한지 여부를 확인한 후

NSEvent *evt = [NSApp currentEvent]; 

구하여 필요한 수정 플래그에 역할을 할 수 있습니다 :

if (evt && evt.type == NSKeyDown) { 
    evt.modifierFlags // NSShiftKeyMask, NSCommandKeyMas, NSAlternateKeyMask 

    // Perform actions 
} 
+0

작업 아무튼 수정 자 플래그로 enter 명령을 호출하지 않습니다. – Astoria