gpt4 book ai didi

cocoa - 在一个窗口中使用 mouseMoved 的多个自定义控件

转载 作者:行者123 更新时间:2023-12-03 18:07:12 24 4
gpt4 key购买 nike

一开始我有一个带有自定义控件的窗口。为了让它接受鼠标移动事件,我只需将其放入 awakeFromNib 中:

代码:

[[self 窗口] makeFirstResponder:self];[[自身窗口] setAcceptsMouseMovedEvents:YES];

现在我正在同一个窗口中与其中的四个一起做某事,但这不再那么漂亮了。首先,我将它们从控件的 awakeFromNib 中取出,并决定使用我的 appController 来管理它,即 [window makeFirstResponder:View]

我的问题是,如果我希望其中四个响应鼠标移动事件,如何在同一 View 中管理其中四个?现在,我已经告诉窗口响应 mouseMoved 事件,但没有任何 View 响应 mouseMoved。

最佳答案

您还需要重写 -acceptsFirstResponder 以返回 YES。

    #pragma mark NSResponder Overrides    - (BOOL)acceptsFirstResponder    {    return YES;    }

-mouseMoved 事件的开销很大,因此当调用控件的 -mouseExited 消息时我会关闭鼠标移动事件,并在 -mouseEntered 中将其打开。

    - (void)mouseEntered:(NSEvent *)theEvent{    [[self window] setAcceptsMouseMovedEvents:YES];    [[self window] makeFirstResponder:self];}- (void)mouseMoved:(NSEvent *)theEvent{...}- (void)mouseExited:(NSEvent *)theEvent{    [[self window] setAcceptsMouseMovedEvents:NO];}

我在我的自定义控件应用程序中快速测试了这一点。我在 nib 文件中多次复制该控件,并且它按预期工作。

您可能还需要:

- (void)awakeFromNib{    [[self window] setAcceptsMouseMovedEvents:YES];    [self addTrackingRect:[self bounds] owner:self userData:NULL assumeInside:YES];}

我认为 -setAcceptsMouseMovedEvents 不是必需的,但我很确定跟踪矩形代码是必需的。您可能还需要尝试假设内部:参数的值,但这已记录在案。

关于cocoa - 在一个窗口中使用 mouseMoved 的多个自定义控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/502038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com