有没有办法在不继承 NSTextView 的情况下将光标设置为指向文本视图的指针?
我阅读了很多关于 NSTrackingAreas 的内容,测试了很多示例,设置了不同的跟踪选项并实现了不同的方法,但光标仍然是 I-Beam。我读过它是 AppKit 的自动功能,那么我该如何防止呢?
谢谢!
有没有办法在不继承 NSTextView 的情况下将光标设置为指向文本视图的指针?
我阅读了很多关于 NSTrackingAreas 的内容,测试了很多示例,设置了不同的跟踪选项并实现了不同的方法,但光标仍然是 I-Beam。我读过它是 AppKit 的自动功能,那么我该如何防止呢?
谢谢!
我不得不子类化。经过几个小时测试了很多方法和选项,这终于奏效了:
@implementation ATTextView
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
_trackingArea = [[NSTrackingArea alloc]initWithRect:[self bounds] options: (NSTrackingMouseMoved | NSTrackingActiveInKeyWindow) owner:self userInfo:nil];
[self addTrackingArea:_trackingArea];
}
return self;
}
- (void)mouseMoved:(NSEvent *)event
{
if ([self isEditable]) [[NSCursor IBeamCursor] set];
else [[NSCursor pointingHandCursor] set];
}
- (void)updateTrackingAreas {
[super updateTrackingAreas];
[self removeTrackingArea:_trackingArea];
_trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] options: (NSTrackingMouseMoved | NSTrackingActiveInKeyWindow) owner:self userInfo:nil];
[self addTrackingArea:_trackingArea];
}
@end
只是为了找到正确的例子(Cocoa 是 80% 的文档阅读和 20% 的编码): https://developer.apple.com/library/mac ... 0i-CH8-SW1
这对我使用 Swift 3 有效:
class HyperlinkTextField : NSTextField {
override func resetCursorRects() {
discardCursorRects()
addCursorRect(self.bounds, cursor: NSCursor.pointingHand())
}
}