2013-07-03 2 views
2

setEnabled: 메서드가 내 mouse{down,drag,up}rightMouse{down,drag,up}을 재정의 한 하위 클래스에서 작동하지 않습니다. 버튼의 활성화/비활성화가 이러한 기능 외부에 있어야한다고 생각합니다. 비활성화 된 상태에서 버튼이 마우스 이벤트를 처음 수신하지 않아야합니다.활성화 된 경우에도 NSButton 하위 클래스가 여전히 실행됩니다.

이 기능을 재정의 할 때 명시 적으로 확인해야합니까?

+0

왜 마우스 이벤트가 비활성화되면 수신하지 않아야합니까? 조건을 확인하여 버튼이 비활성화 된 경우 아무 것도하지 마십시오. – TheAmateurProgrammer

답변

2

자신 만의 점검을해야한다고 생각합니다.

Apple's writeup on Cocoa Event Architechture에서 설명했듯이 버튼을 포함하는 창은 이벤트 수신에 대한 응답으로 버튼에 mouseDown: (또는 다른 방법이 적합합니다)을 전송합니다. 창에서 메시지를 보내지 않기로 결정하려면 먼저 버튼이 NSControl 하위 클래스 (enabled은 속성이 NSControl이지만 NSView이 아님)인지 확인한 다음 enabled 플래그를 확인해야합니다. 그것은 창구의 책임 영역을 벗어납니다. 첫 번째 응답자 상태와 동일한 방식으로 이벤트 발송 시스템에 포함 된 컨트롤을 사용할 수 없습니다.

흥미로운 통찰력으로, GNUStep's -[NSControl mouseDown:] implementation을 살펴보면 이벤트를 처리하기 전에 실제로 [self isEnabled]을 확인합니다.

+0

의미가 있습니다. 링크 btw .. 주셔서 감사합니다. :) – Roshan

+0

기꺼이 도와 드리겠습니다. –

관련 문제