更改NSTextField,NSTextView的FocusRing颜色

时间:2013-05-11 14:32:43

标签: objective-c macos cocoa nstextview

如何将focusRing颜色从蓝色更改为红色。

(这个问题是继续Generic validation on input,这里不是设置默认的蓝色焦点,而是需要红色焦点。)

默认情况如下:

enter image description here

我需要这样的东西(注意:显示的图像并不完美,如Box 中所示):

enter image description here

我从

尝试了一些事情
  1. http://www.cocoabuilder.com/archive/cocoa/241956-how-to-change-focus-ring-color.html
  2. Cocoa focus ring color animation
  3. http://toomasvahter.wordpress.com/2010/06/13/drawing-focus-rings-in-nscell-and-nsview/
  4. 但没有成功。

    需要你的帮助。

1 个答案:

答案 0 :(得分:1)

子类NSTextview并在代码

下面插入
-(void)mouseEntered:(NSEvent *)theEvent{

    CALayer *lay = [self layer];
    CGColorRef  myColor=CGColorCreateGenericRGB(0, 0, 1, 1);
    [lay setBorderColor:myColor];
    [lay setBorderWidth:4];
    //[self setWantsLayer:YES];
    [self setLayer:lay];
    [self makeBackingLayer];
    //CGColorRelease(myColor);
}   

-(void)mouseExited:(NSEvent *)theEvent{

    CALayer *lay = [self layer];
    CGColorRef  myColor=CGColorCreateGenericRGB(0, 0, 1, 1);
    [lay setBorderColor:myColor];
    [lay setBorderWidth:0];
    //[self setWantsLayer:YES];
    [self setLayer:lay];
    [self makeBackingLayer];
    //CGColorRelease(myColor);
}



-(void)updateTrackingAreas{
    [super updateTrackingAreas];
    if (trackingArea){
        [self removeTrackingArea:trackingArea];
        [trackingArea release];
     }

    NSTrackingAreaOptions options = NSTrackingInVisibleRect | NSTrackingMouseEnteredAndExited | NSTrackingActiveInKeyWindow;
    trackingArea = [[NSTrackingArea alloc] initWithRect:NSZeroRect options:options owner:self userInfo:nil];
    [self addTrackingArea:trackingArea];

}