Cocoa nsview更改光标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cocoa nsview更改光标相关的知识,希望对你有一定的参考价值。

我试图在可可应用程序中更改默认光标。我读到有关此内容的信息,但标准方法对我不起作用。

我尝试将此方法添加到我的OpenGLView子类中:

- (void) resetCursorRects
{
    [super resetCursorRects];
    NSCursor * myCur = [[NSCursor alloc] initWithImage:[NSImage imageNamed:@"1.png"] hotSpot:NSMakePoint(8,0)];
    [self addCursorRect: [self bounds]
          cursor: myCur];
    NSLog(@"Reset cursor rect!");

} 

它不起作用。为什么?

答案

有两种方法可以做到。首先-最简单-是在鼠标进入视图并离开视图时更改光标。

- (void)mouseEntered:(NSEvent *)event
  {
   [super mouseEntered:event];
   [[NSCursor pointingHandCursor] set];
  }

- (void)mouseExited:(NSEvent *)event
  {
   [super mouseExited:event];
   [[NSCursor arrowCursor] set];
  }

另一种方法是创建跟踪区域(即,在awakeFromNib方法中),并覆盖- (void)cursorUpdate:方法

- (void)createTrackingArea
  {
   NSTrackingAreaOptions options = NSTrackingInVisibleRect | NSTrackingCursorUpdate;
   NSTrackingArea *area = [[NSTrackingArea alloc] initWithRect:self.bounds options:options owner:self userInfo:nil];
   [self addTrackingArea:area];
  }


- (void)cursorUpdate:(NSEvent *)event
  {
   [[NSCursor pointingHandCursor] set];
  }
另一答案

对于那些正在寻找Swift解决方案的人,语法是:

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

    NSCursor.pointingHand.set()
}

以上是关于Cocoa nsview更改光标的主要内容,如果未能解决你的问题,请参考以下文章

Cocoa:当它在NSButton上时更改光标

OS X/Cocoa:在透明窗口内的 NSView 上绘图

cocoa - 视觉编辑/设计 NSView

在 NSView 中拖放

Cocoa NSView 子视图阻止拖放

NSView 不显示更新