15

为什么我不能让光标在鼠标拖动期间保持不动?一旦我开始拖动,它就会恢复为“箭头”(即使我在启动后将其设置为应用程序委托中的张开手)。

- (void)mouseDown:(NSEvent *)event
{
   [[NSCursor closedHandCursor] push];
}

- (void)mouseUp:(NSEvent *)event
{
   [NSCursor pop];
}
4

3 回答 3

23

如果您不希望其他视图在拖动时更改光标,您可以在 -mouseDown 中执行:

[[self window] disableCursorRects];

在 -mouseUp 中:

[[self window] enableCursorRects];
[[self window] resetCursorRects];
于 2012-10-16T10:55:36.870 回答
12

尝试使用addCursorRect:cursor:为您的视图设置光标。

覆盖resetCursorRects您的视图:

- (void)resetCursorRects
{
    [super resetCursorRects];
    if(drag) {
        [self addCursorRect:self.bounds cursor:[NSCursor closedHandCursor]];
    }
}

您需要调用invalidateCursorRectsForView:以强制更新您的光标矩形:

[self.window invalidateCursorRectsForView:self];

但是如果你想在你的视图之外有不同的光标,你可以调用[[NSCursor closedHandCursor] set]你的mouseDragged:方法。

于 2012-07-02T06:59:04.490 回答
1

我遇到了同样的问题,这是由于在拖动过程中我正在修改子视图的框架,这似乎重置了光标。使用.cursorUpdate选项添加跟踪区域并在内部重置光标cursorUpdate(with:)时,它似乎可以正常工作。

class MyViewController: NSViewController {

    var cursor: NSCursor?

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addTrackingArea(NSTrackingArea(rect: .zero, options: [.activeInKeyWindow, .inVisibleRect, .cursorUpdate], owner: self))
    }

    override func mouseDown(with event: NSEvent) {
        cursor = NSCursor.closedHand
    }

    override func cursorUpdate(with event: NSEvent) {
        cursor?.set()
    }
        
    override func mouseUp(with event: NSEvent) {
        cursor = nil
    }
    
}
于 2020-10-15T11:33:16.470 回答