【问题标题】:mouseDown event not called when NSControls are clicked, not even on subclassed NSView单击 NSControl 时未调用 mouseDown 事件,甚至在子类 NSView 上也未调用
【发布时间】:2013-01-23 18:15:38
【问题描述】:

如何让当前的 NSControl 点击 NSWindow?我在 NSWindowController 上有一个鼠标按下事件,
-(void)mouseDown:(NSEvent *)theEvent {
但是当我在放置在 NSWindow 上的 NSControls 内单击时,我根本没有调用鼠标按下事件。
我什至将 NSControls 子类化为自定义 NSViews,但是在内部单击时我也没有收到他们的鼠标按下事件。我将setAcceptsTouchEvents添加到yes 并调用acceptsFirstResponder 但它没有帮助。令人惊讶的是,当我单击 NSWindow 而不是任何 NSControls 时,我得到了 mousedown 事件。
我在这里做错了什么?

【问题讨论】:

    标签: cocoa nsevent


    【解决方案1】:

    试试这个

     - (void) mouseDown:(NSEvent *)theEvent
    {
    if ( ([theEvent modifierFlags] & NSCommandKeyMask) != 0)
    {
        [self setFloatValue:100.0f];
        [self.target performSelector:self.action withObject:self];
    }
    else
        [super mouseDown:theEvent];
    }
    

    编辑:

    目标应该是实现该方法的类实例。因此,例如,如果您的应用程序委托中有一个 IBAction 连接到名为 sliderReport 的滑块:那么请执行以下操作:

       [self sendAction:@selector(sliderReport:) to:[NSApp delegate]];
    

    【讨论】:

    • 不,它没有被调用,也许当我单击任何 NSControl 时控件没有进入函数内部。我有一个 IKImageView 和 2 个 IKImageBrowserViews。基本上我已经添加了一个单独的 NSWindowcontroller,然后在其 xib 上添加了 NSControls。控件已连接到文件所有者
    • 好吧,我想检测对 IKImageBrowserView 控件的单击。我正在对视图进行子类化,并添加了方法 becomeFirstResponder 、 acceptFirstResponder 和 acceptFirstMouse 进行覆盖。但问题是方法 -(void)mouseDown:(NSEvent *)theEvent { on NSWindowController 当我在任何 NS IBoutlets 内单击时不会被调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    相关资源
    最近更新 更多