setEnabled:
메서드가 내 mouse{down,drag,up}
및 rightMouse{down,drag,up}
을 재정의 한 하위 클래스에서 작동하지 않습니다. 버튼의 활성화/비활성화가 이러한 기능 외부에 있어야한다고 생각합니다. 비활성화 된 상태에서 버튼이 마우스 이벤트를 처음 수신하지 않아야합니다.활성화 된 경우에도 NSButton 하위 클래스가 여전히 실행됩니다.
이 기능을 재정의 할 때 명시 적으로 확인해야합니까?
setEnabled:
메서드가 내 mouse{down,drag,up}
및 rightMouse{down,drag,up}
을 재정의 한 하위 클래스에서 작동하지 않습니다. 버튼의 활성화/비활성화가 이러한 기능 외부에 있어야한다고 생각합니다. 비활성화 된 상태에서 버튼이 마우스 이벤트를 처음 수신하지 않아야합니다.활성화 된 경우에도 NSButton 하위 클래스가 여전히 실행됩니다.
이 기능을 재정의 할 때 명시 적으로 확인해야합니까?
자신 만의 점검을해야한다고 생각합니다.
Apple's writeup on Cocoa Event Architechture에서 설명했듯이 버튼을 포함하는 창은 이벤트 수신에 대한 응답으로 버튼에 mouseDown:
(또는 다른 방법이 적합합니다)을 전송합니다. 창에서 메시지를 보내지 않기로 결정하려면 먼저 버튼이 NSControl
하위 클래스 (enabled
은 속성이 NSControl
이지만 NSView
이 아님)인지 확인한 다음 enabled
플래그를 확인해야합니다. 그것은 창구의 책임 영역을 벗어납니다. 첫 번째 응답자 상태와 동일한 방식으로 이벤트 발송 시스템에 포함 된 컨트롤을 사용할 수 없습니다.
흥미로운 통찰력으로, GNUStep's -[NSControl mouseDown:]
implementation을 살펴보면 이벤트를 처리하기 전에 실제로 [self isEnabled]
을 확인합니다.
의미가 있습니다. 링크 btw .. 주셔서 감사합니다. :) – Roshan
기꺼이 도와 드리겠습니다. –
왜 마우스 이벤트가 비활성화되면 수신하지 않아야합니까? 조건을 확인하여 버튼이 비활성화 된 경우 아무 것도하지 마십시오. – TheAmateurProgrammer