2012-08-17 65 views
2

我創建NSSegmentedCell的子類,並實現drawWithFrame如下:NSSegmentedCell子類繪製

#import "CustomSegmentedCell.h" 

@implementation CustomSegmentedCell 

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { 

    int i=0, count=[self segmentCount]; 
    NSRect segmentFrame=cellFrame; 

    for(i=0; i<count; i++) { 
     segmentFrame.size.width=[self widthForSegment:i]; 
     [NSGraphicsContext saveGraphicsState]; 
     // Make sure that segment drawing is not allowed to spill out into other segments 
     NSBezierPath* clipPath = [NSBezierPath bezierPathWithRect: segmentFrame]; 
     [clipPath addClip]; 
     [self drawSegment:i inFrame:segmentFrame withView:controlView]; 
     [NSGraphicsContext restoreGraphicsState]; 
     segmentFrame.origin.x+=segmentFrame.size.width; 
    } 

    _lastDrawRect=cellFrame; 

} 

@end 

問題是段沒有拿得出第一次啓動應用程序,它變得可見,只有當我用鼠標點擊上分段控件假設繪製的空白區域。請讓我知道,我在這裏錯過了什麼。

感謝,

回答

2

子類並實現drawSegment:inFrame:withView:

- (void)drawSegment:(NSInteger)segment inFrame:(NSRect)frame withView:(NSView *)controlView 
{ 
    NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:frame xRadius:8 yRadius:8]; 
    [path setClip]; 
    [path setLineWidth:2.5]; 
    [[NSColor grayColor] setStroke]; 
    NSColor* bgColr; 
    if (segment%2) { 
     bgColr = [NSColor blackColor]; 
    } 
    else { 
     bgColr = [NSColor redColor]; 
    } 

    [bgColr setFill]; 
    [NSBezierPath fillRect:frame]; 

} 
+0

感謝Parag的代碼,要求是相當老了,但我感謝您的幫助。 – AmitSri 2013-02-15 07:29:25