【问题标题】:cancelOperation not called in NSView subclassNSView 子类中未调用 cancelOperation
【发布时间】:2012-02-25 10:42:00
【问题描述】:

当我按下 Esc 时,cancelOperation: 没有在我的基本 NSView 子类中被调用。

我检查并在keyDown 收到 Esc 键。此外,正在调用其他操作消息(例如 moveLeft)。

视图是如下所示窗口的一部分:

[self.window addChildWindow:wc.window ordered:NSWindowAbove];
[wc.window makeKeyAndOrderFront:self];

我做错了什么?

【问题讨论】:

    标签: macos cocoa nsview keydown esc-key


    【解决方案1】:

    您是将其实现为cancelOperation 还是cancelOperation:?有很大的不同。方法签名应该是:

    - (void)cancelOperation:(id)sender
    

    这适用于我的香草NSView

    【讨论】:

    • 问题可能是你正在实现keyDown:,但在你的实现中没有调用interpretKeyEvents:。您要么不需要实现keyDown:,要么确保在您的实现中调用[self interpretKeyEvents:[NSArray arrayWithObject:theEvent]]
    • 不,我没有实现 keyDown:。我刚刚测试了 Esc 是否被接收,然后将其删除。
    【解决方案2】:

    我派生的NSView 有同样的问题。实现acceptsFirstResponder后解决如下:

    - (BOOL)acceptsFirstResponder
    {
        return YES;
    }
    

    【讨论】:

      【解决方案3】:

      就我而言,我有一个包含几个NSWindows 的应用程序。我不得不打电话 [self.window makeFirstResponder:self] 在我的NSView 子类中让视图响应cancelOperation:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多