2012-06-05 5 views
3

Можем ли мы изменить цвет разделителя? В документах Apple говорится, что мы можем переопределить -dividerColor в подклассе NSSplitView для этого, но это не работает для меня, или мое понимание неверно. Также я попытался создать цветной слой над разделителем, например:Как изменить цвет разделителя в NSSplitView?

colorLayer = [CALayer layer]; 
NSRect dividerFrame = NSMakeRect([[self.subviews objectAtIndex:0] frame].size.width, [[self.subviews objectAtIndex:0] frame].origin.y, [self dividerThickness], self.frame.size.height); 

[colorLayer setBackgroundColor:[color coreGraphicsColorWithAlfa:1]]; 
[colorLayer setFrame:NSRectToCGRect(dividerFrame)]; 

[self.layer addSublayer:colorLayer]; 

Не работает.

ответ

6

Я тоже пытался подклассифицировать - (void)dividerColor, и я не уверен, почему он не работает, хотя я знаю, что он называется (и он находится в документации).

Один из способов изменения цвета разделителя заключается в подклассе - (void)drawDividerInRect:(NSRect)aRect. Однако по какой-то причине этот метод не вызывается, и я проверял по всему Интернету ответы, но ничего не мог найти, поэтому я получил его от drawRect. Вот код для наследнике NSSplitView:

-(void) drawRect { 
    id topView = [[self subviews] objectAtIndex:0]; 
    NSRect topViewFrameRect = [topView frame]; 
    [self drawDividerInRect:NSMakeRect(topViewFrameRect.origin.x, topViewFrameRect.size.height, topViewFrameRect.size.width, [self dividerThickness])]; 
} 

-(void) drawDividerInRect:(NSRect)aRect { 
    [[NSColor redColor] set]; 
    NSRectFill(aRect); 
} 
6

На самом деле, просто подклассы NSSplitView и верховные -(void)dividerColor работает, но работает только для тонкой или толстой перегородки.

Я создал простой настраиваемый вид разделения, как это:

@interface CustomSplitView : NSSplitView 
@property NSColor* DividerColor 
@end 

@implementation CustomSplitView 
- (NSColor*)dividerColor { 
    return (self.DividerColor == nil) ? [super dividerColor] : self.DividerColor; 
} 
@end 

Затем в Interface Builder указать пользовательский класс для разделенной точки зрения, чтобы быть CustomSplitView и добавить новый определенный пользователем атрибут во время выполнения с ключом путь = DividerColor, типа = Цвет и выберите желаемый цвет сплиттера.

0

Одним из важных моментов, о которых я не упоминал нигде, является то, что если вы переопределяете drawRect в виде с разделом, тогда вы должны назвать super - иначе drawDividerInRect: никогда не вызывается. Так, он должен идти что-то вроде этого:

- (void)drawRect:(NSRect)dirtyRect { 
    // your other custom drawing 

    // call super last to draw the divider on top 
    [super drawRect:dirtyRect]; 

} 

- (void)drawDividerInRect:(NSRect)aRect { 
    [[NSColor blueColor] set]; 
    NSRectFill(aRect); 
} 
4

Этот ответ может быть поздно, но:
Если вы используете Interface Builder, можно изменить свойство, перейдя к личности инспектора NSSplitView (cmd + alt + 3) и добавление атрибута Runtime User Defined для dividerColor типа Color.

Смежные вопросы