2011-12-26 2 views
0

응용 프로그램 메뉴의 내 Cocoa 응용 프로그램에 첫 번째 응답자에게 delete: 메시지를 보내는 메뉴 항목 "삭제"가 있습니다. 이제는 키보드 포커스가 NSOutlineView인데,이 경우 첫 번째 응답자입니다. NSOutlineView의 서브 클래 싱을하지 않을 경우 delete: 메시지가 전달 될 수있는 방법이 있습니까? NSOutlineViewDelegate 또는 NSOutlineViewDataSource 프로토콜은 이러한 작업을 처리하는 데 흥미로운 것을 정의하지 못합니다.NSResponder 대리인과 같은 것이 있습니까?

+0

서브 클래 싱에 대한 귀하의 반대 의견은 무엇입니까? 간단하고 원하는 것을 얻을 수 있습니다. –

+0

확실히 결과를 얻지 만 그 접착제 요소를 처리하는 것이보기 대신 컨트롤러의 역할 인 것 같습니다. 또한 Cocoa는 위임 패턴을 강력하게지지하기 때문에 아마도 이러한 작업을 처리 할 수있는 기본 제공 대리인이 있다고 생각했습니다. – Tony

답변

2

첫 번째 응답자는 정확히 다음과 같습니다. 첫 번째 응답자. 관심이없는 메시지는 다음 응답자에게 전달되며 메시지는 응용 프로그램 개체에 도달 할 때까지 차례대로 전달할 수 있습니다.

이 메시지를 처리하려면 응답기 체인에 있어야합니다. 윈도우 컨트롤러는 좋은 방법입니다. 윈도우의 다음 응답자가됩니다.

“Event Architecture” in the Event-Handling Guide을 참조하십시오.

+1

아키텍처 관점에서, 창 컨트롤러가 테이블/개요보기에 로컬 인 "복사", "붙여 넣기"및 "삭제"이벤트를 처리하는 것이 지저분 해 보이지 않습니까? 그 방법은 뷰가 바인딩하는 배열/트리 컨트롤러 나 뷰의 위임자가 처리하는 것이 가장 좋은 것으로 보이지만 NSArrayController와 NSTreeController는 NSResponders가 아니며 응답 체인에있을 수 없습니다. – Tony

+1

커스텀'NSViewController' 객체를 사용하여 각각의 개별 뷰를 관리하고 리스폰 더 체인에 뷰 컨트롤러를 삽입 할 수 있습니다. 보기 컨트롤러는 복사 및 붙여 넣기 등을 처리 할 수 ​​있습니다. –

+0

@ 토니 : 윈도우 컨트롤러가 데이터를 소유 한 객체 (예 : 문서)를 알고 있거나 아는 경우 아닙니다. 창 컨트롤러는 뷰와 창 및 모델 컨트롤러 사이의 중간에 거의 존재합니다. 뷰가 잘라내 기, 복사, 붙여 넣기 및 삭제 (바인딩 또는 데이터 소스 메시지를 통해)를 처리하는 것이 가장 좋겠지 만 추가하는 하위 클래스를 만들지 않는 한보기가 좋습니다. –

관련 문제