7

仕切りの色を変えることはできますか?Apple のドキュメントには、このために NSSplitView のサブクラスで -dividerColor をオーバーライドできると書かれていますが、それがうまくいかないか、私の理解が正しくありません。また、仕切りの上にカラーレイヤーを作成しようとしました。

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];

動作しません。

4

6 に答える 6

8

実際には、単純にサブクラス化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、タイプ = Color で新しいユーザー定義のランタイム属性を追加し、目的のスプリッター カラーを選択します。

于 2014-03-27T09:59:03.363 に答える
7

- (void)dividerColorもサブクラス化を試みましたが、それが呼び出されていることを知っていても(そしてドキュメントに記載されています)、なぜそれが機能しないのかわかりません。

分割線の色を変更する 1 つの方法は、(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);
}
于 2012-06-13T04:37:10.910 に答える
0

どこにも言及されていない重要なポイントの 1 つは、分割ビューで 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);
}
于 2014-11-14T17:34:46.577 に答える