2011-02-05 4 views
0

약간의 도움이 필요합니다. 항상 오른쪽 위 모서리에 표시되도록 설정된 창이 있지만 항상 키로 설정되어 있지 않습니다. 창에는 버튼이 몇 개 있으며 단추를 클릭하면 창은 키가됩니다. 그러나 단추를 클릭하면 창에서 키가 제거되기를 원합니다.Objective-C NSWindow 키에서 창을 제거하십시오.

이상적으로, 버튼을 클릭하면 버튼이 눌려지며 버튼이 호출하는 메소드에서 단추의 동작을 수행하고 키를 창에서 제거하는 문장을 작성하려고하는 것이 이상적입니다.

그러나 응용 프로그램 대리인 아래에 창이 선언되고 단추에 연결된 메서드가 별도의 헤더 파일에 선언되어 있습니다.

누구나 내가 어떻게 할 수 있는지에 대한 아이디어가 있으니 도움을 주시면 감사하겠습니다. 미리 감사드립니다, Sami.

답변

1

응용 프로그램의 아키텍처에 따라 몇 가지 해결책이 있습니다.

  1. 는 메인 윈도우가 키를 만들 것입니다 [[NSApp mainWindow] makeKeyWindow]을 보냅니다.

  2. 응용 프로그램 대리인이 주 창에 대한 참조를 가질 수 있습니다. 버튼 클릭을 처리하는 액션 메서드에서 응용 프로그램 위임자에게 주 윈도우를 키로 만들도록 요청할 수 있습니다. 응용 프로그램 대리인은 [mainWindow makeKeyWindow]을 보낼 것입니다.

  3. 응용 프로그램 대리인은 주 창을 관리하는 창 컨트롤러에 대한 참조를 가질 수 있습니다. 버튼 클릭을 처리하는 액션 메서드에서 응용 프로그램 위임자에게 주 윈도우를 키로 만들도록 요청할 수 있습니다. 응용 프로그램 대리인이 주 창 컨트롤러에 요청하고 주 창 컨트롤러는 [[self window] makeKeyWindow]을 보냅니다.

  4. 응용 프로그램 대리인은 NSWindowDidResignKeyNotification 알림을 청취하고 키가 종료 된 마지막 창에 대한 참조를 유지할 수 있습니다. 버튼 클릭을 처리하는 액션 메서드에서 응용 프로그램 대리인에게 키 상태를 이전 창으로 반환하도록 요청할 수 있습니다. 응용 프로그램 대리인은 창이 보조 창인 경우 NSWindowDidResignKeyNotification 알림을 무시해야합니다. 이 솔루션은 단일 메인 윈도우가 없을 때 더 좋습니다.

최초의 솔루션이 적용되지 않는 경우) 응용 프로그램 대리인이 적절한 창에 키 상태를 복원 할 책임이 방법을 선언하는 프로토콜을 준수 수, 또는 b) 액션 메소드가 알리는 통지를 게시 할 수있는 작업 방법이 완료된 응용 프로그램, 응용 프로그램 위임자가 해당 알림을 수신하고 키 상태를 적절한 창에 복원하도록합니다.

응용 프로그램 대리인이 키 상태를 복원하는 동작을 구현한다고 제안했지만 다른 개체도이를 담당 할 수 있습니다. 알림이 제공 될 때 고유 한 느슨한 결합으로 인해 키 상태를 복원 할 객체에 대한 참조를 가져올 필요가 없으므로 알림을 사용할 때 특히 편리합니다.

+0

도움 주셔서 감사합니다. 질문을 잘못 이해했을 수도 있습니다. 창은 주요 창문이됩니다. 버튼에서 창을 클릭했을 때 창을 닫을 방법을 호출하고 싶습니다. 열쇠에서. – Sami

+0

@Sam 나의 답변은 보조 창에서 키 상태를 사퇴하는 방법을 설명합니다.코코아는 어떤 다른 윈도우가 키가되어야 하는지를 알지 못하기 때문에 간단한'-resignKey' 메쏘드가 없기 때문에 다른 윈도우 키를 만드는 것은 여러분의 책임입니다. _ –

+0

'[NSApp mainWindow]'는 단순히 맨 앞의 일반 윈도우를 의미합니다. 'NSApp'는 당신이 당신의 "메인 윈도우"라고 생각하는 창을 전혀 모른다. –