2009-12-17 5 views
0

을 키 입력에 응답하지 않습니다,하지만 난 그것을 찾을 수 없습니다 :NSWindow 표시 그것은 매우 간단 할 수 있습니다 명령의

내 응용 프로그램에서 별도의 세 가지 펜촉의 세 가지 창을. 하나는 새 문서가 열릴 때 열리고 다른 두 개는 프로그램의 창 메뉴에서 열 수 있습니다.

문제는 두 개의 창 (시작 부분에 열려있는 창)이 예를 들어 save 명령과 같이 일반적인 키 입력을 허용하고 다른 명령은 경고 대신 경고음을 제공합니다. 두 창 또는 컨트롤러 사이의 차이점을 이해할 수 없습니다. 나는 반응 체인과 관련이있을 것이라는 것을 알고 있지만, 나는 우둔한 상태입니다.

아이디어가 있으십니까?

답변

2

창 대리자가 창 컨트롤러로 설정되고 창 컨트롤러가 -saveDocument: (또는 저장 항목이 연결된 모든 동작)을 구현하는지 확인하십시오.

+0

하지만 saveDocument 나 다른 모든 키보드 단축키를 구현하고 싶지는 않습니다. 문서 단축키를 내 문서 컨트롤러에 전달하고 싶습니다. 어떻게 든 그들은 전달되지 않습니다. – wackazong

+0

설명 : 문서가 문서 컨트롤러가 아닙니다. 문서 제어기는 문서를 제어합니다. –

2

Windows는 키 조합에 응답하지 않습니다. 메뉴 항목은. 마우스를 사용하든, 키 조합을 사용하든, 또는 접근성을 사용하든간에 눌려진 것에 응답하여 메뉴 항목은 응답 메시지 체인 아래로 동작 메시지를 보냅니다.

응답자 체인의 아무 것도 동작 메시지에 응답하지 않으면 경고음이납니다.

이것이 NSDocument 기반 응용 프로그램이고 Apple의 doc 기반 응용 프로그램 템플릿을 시작했다고 가정하면 메뉴 항목의 동작은 saveDocument:이고 NSDocument 개체는 해당 메시지에 응답하는 개체입니다. 문서 창이 활성 상태이면 문서가 응답 체인에 있으므로 해당 작업 메시지를 보내는 메뉴 항목이 활성화됩니다. 세 번째 창이 활성화되어 있으면 문서가 응답 체인에 없습니다. 다른 사람이 해당 메시지에 응답하지 않으므로 메뉴 항목이 비활성화됩니다.

이 문제는 저장과 관련이 없습니다.이 문제는 문서 개체를 통과해야하는 모든 작업 메시지에 영향을줍니다. 중요한 다른 예가 인쇄입니다. 사용자는 세 번째 창이 아닌 문서를 인쇄하는 것을 의미합니다.

아마도이 세 번째 창에 다른 창에 대한 피어로 존재하는 창을 만들었을 것입니다. 당신이 가지고있는 이런 응답 체인 문제 외에도, 사용자는 아마도 그들이 문서를 떠났다는 사실을 깨닫지 못할 것입니다; 그들은 여전히 ​​문서 작업을 수행 할 수있을 것으로 기대합니다. 대신 유틸리티 패널로 만드십시오.

어떤 창이든지이 창을 만들 수있는 좋은 이유가 있다면이 세 번째 창이 메인이 될 때 반응 체인에서 마지막 활성 문서 객체를 유지해야합니다 문서 윈도우 (아마도 마지막 윈도우)가 닫혀 있기 때문에 윈도우가 메인이되는 경우를 다루는 시간이다.

+0

안녕 피터, 계몽을위한 많은 감사합니다.세 번째 창은 실제로 문서의 일부이기도하며, 어떻게 문서가 아닌 창으로 만들 수 있는지 잘 모릅니다. 그것은 정말로 두 번째 창이 이미있는 것처럼 문서 창이어야합니다. 이제 문제는 다음과 같습니다. 왜 세 번째 창이 비 문서 관련 창이 되었습니까? 나는 지금 생각이있다. – wackazong

+0

문서에'addWindowController :'메세지를 보내서 윈도우의 윈도우 컨트롤러를 문서의 배열에 추가하십시오. NSDocument 서브 클래스의'makeWindowControllers' 메쏘드에서 이것을 할 수 있습니다. –

0

글쎄, initWithNibFile을 사용하여 컨트롤러로 만든 세 번째 창을 구현하고, 컨트롤러에서 프로 시저를 실행 한 다음 [window close] 명령을 보냈다. 아직 화면에 나타납니다. 그것은 어떻게 든 문서와 관련된 창에서 꺼내 보았습니다. 그 이유는 모르겠습니다. 아니요, 특정 호출 된 프로 시저를 문서 컨트롤러 자체로 마이그레이션하고 창을 두 번째 창처럼 처리 한 다음 다시 작동합니다.

+0

예, 창 컨트롤러로 창을 인스턴스화하고 문서의 창 컨트롤러에 추가해야합니다. 내 대답에 대한 내 의견을 참조하십시오. –

+0

글쎄, 그 전에도 정확히 했어. 내가 보는 유일한 차이점은 처음 창을 열 때 창을 만드는 것입니다. 전에는 프로그램을 만들 때 프로그램을 표시하지 않기 때문에 프로그램을 만들고 숨겨진 명령을 다시 보냈습니다. 창은 show 명령과 함께 표시되지만 닫기 명령을 실행하면 창 컨트롤러에 대한 연결이 끊어진 것 같습니다. – wackazong

관련 문제