키 윈도우가 이동하지 않는 패널을 만든다 (NSFontPanel 같은)
목적
타이틀이 길지만 NSFontPanel (혹은 NSColorPanel) 같은 거동을 하는 NSPanel을 만들고 싶다.
메모 .app 어째서 폰트 패널을 조작해 보면 이하와 같은 움직임을 한다.
이것을 어떻게 만들 것인가,
방법
과장에 쓰고 있지만 실제로는 간단했다.
MyPanel로 구현
-(void)awakeFromNib
{
[self setBecomesKeyOnlyIfNeeded:YES];
}
이것만.
h tp // 여기 아아피. 하테나 bぉg. 코m/엔트리/00000226/레시 D37326에 따르면
必要な時だけキーウインドウになるかを返します。
初期設定はNOを返します。
라는 것.
「액티브한 윈도우 = 키 윈도우」라고 하는 이해로 좋을까. 확실히 키 이벤트를 받는 것은 액티브한 윈도우이므로 맞는 것 같다.
출처
[TODO]
-
보충 1
setBecomesKeyOnlyIfNeeded는 본래 NSView의 needsPanelToBecomeKey 메소드와 쌍으로 사용하는 것 같다.
パネルがキーウインドウになるかを制御する
サブクラスでオーバーライドして使います。
「패널 안에 있는 뷰로부터 요구를 받았을 때만 액티브하게 된다」라고 하는 것. 이번에는 요청을 내는 뷰가 없기 때문에 패널이 활성화되지 않는다.
폰트 패널의 오른쪽 상단에 있는 폰트 사이즈 지정의 NSTextField를 클릭하면, 패널이 액티브하게 된다. 수치를 입력하기 위해서 패널이 키 윈도우가 되었다고 하는 것이지만, 아마 NSTextField의 needsPanelToBecomeKey는 YES를 돌려주게 되어 있다고 추측할 수 있다.
보충 2: 커스텀 뷰를 패널에 태울 때
이 방법으로 독자적인 UI 부품을 패널에 올려 사용하고 싶을 때는, NSView의 acceptsFirstMouse 메소드를 오버라이드(override) 한다. 이것을 사용하는 것으로, 패널의 활성화만으로 사용되고 있던 최초의 마우스 이벤트도 뷰에 통지되게 된다. 반대로, 이것을 구현하지 않으면 UI 부품에 대한 클릭 이벤트를 주워받을 수 없다.
-(BOOL)acceptsFirstMouse:(NSEvent *)theEvent
{
return YES;
}
アクティブでない時、マトリックスをマウスダウンしたときに呼ばれます。
サブクラスでオーバーライドします。YESを返すと、アクティブでない時、マトリックスをクリックすると、アプリケーションはアクティブになりウインドウは前面にきて、マトリックスがクリックされメッセージを送信します。NOを返すとアプリケーションはアクティブになり、ウインドウは前面になりますが、マトリックスをクリックしません。
Reference
이 문제에 관하여(키 윈도우가 이동하지 않는 패널을 만든다 (NSFontPanel 같은)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Nunocky/items/d63060aced69f643efb0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
パネルがキーウインドウになるかを制御する
サブクラスでオーバーライドして使います。
-(BOOL)acceptsFirstMouse:(NSEvent *)theEvent
{
return YES;
}
アクティブでない時、マトリックスをマウスダウンしたときに呼ばれます。
サブクラスでオーバーライドします。YESを返すと、アクティブでない時、マトリックスをクリックすると、アプリケーションはアクティブになりウインドウは前面にきて、マトリックスがクリックされメッセージを送信します。NOを返すとアプリケーションはアクティブになり、ウインドウは前面になりますが、マトリックスをクリックしません。
Reference
이 문제에 관하여(키 윈도우가 이동하지 않는 패널을 만든다 (NSFontPanel 같은)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Nunocky/items/d63060aced69f643efb0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)