NSTextView 中的MouseMoved 通知会生成消息“共享项目数组为空”

问题描述 投票:0回答:2

我在

mouseMove
中使用自定义
NSTextView
事件,当光标位于内容插图之外时将光标设置为指针。当它位于可编辑区域内时,我正在调用
[super mouseMove]
:

- (void)mouseMoved:(NSEvent*)event {
    NSPoint point = [self convertPoint:event.locationInWindow fromView:nil];
    
    if ((point.x > self.textContainerInset.width &&
         point.x < self.frame.size.width - self.textContainerInset.width)
    ) {
        [super mouseMoved:event];
    } else if (point.x > 10) {
        [NSCursor.arrowCursor set];
    }
}

在文本中选择换行符(表示行末尾的空白部分)并将鼠标悬停在所选内容上时,

[super mouseMoved:event]
会在鼠标移动的每个像素上生成以下消息:

Appname[29357:853497] [Framework] Shared items array is empty
Appname[29357:853497] [Framework] No shared items can be accessed

我很困惑为什么会发生这种情况以及可能的原因是什么?

编辑: 即使没有子类化,这似乎也会发生

NSTextView
。这可能是 macOS Catalina 中的一个错误。对我来说,它似乎不会造成任何其他问题。

objective-c macos cocoa appkit nstextview
2个回答
0
投票

我找到了解决办法。它与子类化的标准建议相冲突。但据我所知,它不会引入任何不需要的行为。子类化您的 NSTextView 并重写此方法(是的,无需调用超类,这是使解决方案起作用的部分,叹息):

覆盖 func mouseMoved(with event: NSEvent) {} // swift


0
投票

就我而言,我必须调用

addTrackingArea
方法来启用鼠标跟踪,并且控制台也停止发出
 No shared items can be accessed
响声。 例如:

class TrackableImageView: NSImageView {

override func mouseEntered(with event: NSEvent) {
    super.mouseEntered(with: event)
}

override func mouseExited(with event: NSEvent) {
    super.mouseExited(with: event)
}

override func viewDidMoveToWindow() {
    super.viewDidMoveToWindow()
    addTrackingArea(.init(rect: frame, options: [.mouseEnteredAndExited, .activeInKeyWindow], owner: self))
     
}

}

© www.soinside.com 2019 - 2024. All rights reserved.