2013-03-04 1 views
1

내 응용 프로그램에는 NSComboBox가있는 시트가 표시됩니다. 사용자가 화살표 키를 사용하여 메뉴에서 항목을 선택한 다음 Return 키를 눌러 시트를 선택하면 시트의 확인 단추도 Return 키가 해당 키로 작동하므로 수행됩니다. 이 Return 키가 정상적으로 작동하는 것을 멈추고 싶습니다. 콤보 상자가 첫 번째 응답자이고 현재 이벤트가 반환 키 키 - 업 인 경우 OK 클릭을 무시하려고하지만 NSComboBox를 서브 클래 싱하는 것 외에는 많은 것을 시도한 후에 OK 클릭을 무시하려고 시도하지만 NSPanel은 시트는 서브 클래 싱되어 항상 현재의 최초의 응답자로서 자신을 돌려줍니다. 필자는 필드 편집기를 원했지만 모두 얻을 수있는 것은 NSPanel입니다.
1) 더 좋은 방법이 있나요? 사용자는 마우스를 사용하지 않고 키보드 기반 데이터 입력을 원합니다.
2) 이것이 가장 좋은 방법이라면 콤보 상자가 첫 번째 응답자임을 어떻게 알 수 있습니까?
감사의 마음을 보여준 모든 도움. 확실히 이것은 이전에 다루어 졌습니까?
목사 앤디NSComboBox - 트랩 리턴 키

+0

콤보 상자 firstresponder를 사용해 보았습니까? –

+0

제가 생각하기에는 문제는 콤보 상자의 메뉴가 첫 번째 응답자에 대한 명확한 값이 없다는 것을 보여주는 것입니다. 이것이 바로 창에서 끝나는 이유입니다. –

+1

끔찍한 해결 방법은 메뉴가 닫히는 시간 (comboBoxWillDismiss :)을 기록하고 OK 버튼 선택기가 호출 된 시간을 확인하는 것입니다. 그 사이에 0.1 초 미만이 있으면 확인을 무시합니다. OK 버튼은 여전히 ​​깜박이지만 적어도 일반 기능은 작동합니다. 추한. –

답변

1

는 꽤되지, 해결 방법이 있지만 작동합니다 : 두 통지 NSComboBoxWillPopUpNotificationNSComboBoxWillDismissNotification에 대한

등록.

- (void)comboBoxWillPopUp:(NSNotification *)notification 
{ 
    okButton.keyEquivalent = @""; 
} 

- (void)comboBoxWillDismiss:(NSNotification *)notification 
{ 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0), dispatch_get_main_queue(), ^{ 
     okButton.keyEquivalent = @"\r"; 
    }); 
}