2011-02-18 6 views
5

Tôi đang cố gắng phân loại NSCell để vẽ làm nổi bật nền tùy chỉnh. Tài liệu này dường như gợi ý rằng số ghi đè highlight:withFrame:inView: sẽ cho phép tôi thực hiện việc này nhưng phương pháp này không bao giờ được gọi.Đánh dấu tùy chỉnh NSCell

Thay vào đó, tôi đã ghi đè drawInteriorWithFrame:inView: hoạt động tốt - tôi có thể vẽ những gì tôi muốn trong ô. Tuy nhiên, vấn đề là tôi phải vẽ tất cả những gì bản thân mình, làm mất chức năng của các loại NSCell Tôi đang mở rộng - ví dụ khả năng của một NSTextFieldCell để hiển thị văn bản:

Tuỳ vẽ nhấn mạnh di động:

enter image description here

Tuy nhiên, tôi chỉ muốn vẽ lại nền (nổi bật), và duy trì khả năng sử dụng các chức năng chính của tế bào mở rộng:

enter image description here

Tôi có thể, tất nhiên, chỉ cần vẽ văn bản bản thân mình quá nhưng tôi hy vọng có một cách dễ dàng hơn để làm điều này.

Bất kỳ giúp đỡ được nhiều đánh giá cao.

+2

Bạn đang gửi '[super drawInteriorWithFrame: cellFrame inView: controlView];' (với bất kỳ tên thông số nào bạn đang sử dụng) sau khi bạn đã vẽ nền tùy chỉnh của mình chưa? –

+0

@Bavarious - Nếu tôi làm điều đó thì nền tùy chỉnh bị mất. Kết quả giống như ảnh chụp màn hình thứ hai như tôi cho rằng phương thức cũng vẽ nền của riêng nó. – JoeR

+2

Ah, gotcha. Bạn không thể đặt màu đánh dấu trong suốt sao cho 'super' sẽ không gây nhầm lẫn với đánh dấu tùy chỉnh của bạn và sau đó bạn sử dụng' -isHighlighted' bên trong '-drawInterior…' để quyết định cách bạn nên vẽ nền? –

Trả lời

10

Nhờ sự trợ giúp của @Bavarious, tôi đã cố gắng giải quyết. mở rộng NSTextFieldCell lớp thực hiện của tôi bây giờ chứa:

-(NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { 
    return nil; 
} 

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { 
    if ([self isHighlighted]) { 
     // Draw highlight background here 
    } 

    [super drawInteriorWithFrame:cellFrame inView:controlView]; 
} 

Điều quan trọng là để đảm bảo bạn quay lại nil cho highlightColorWithFrame:inView: ngừng drawInteriorWithFrame:inView: vẽ một nền nhưng vẫn gọi đó là để rút ra những nội dung chính (trong trường hợp văn bản này).

+0

Cách ** chính xác ** bạn vẽ nền? Tôi chỉ có thể thay đổi màu chữ. Tôi đã sử dụng ... '\t nếu ([self isighighed]) { \t \t \t \t NSColor * oldColor = [self backgroundColor]; \t \t [self setBackgroundColor: [NSColor whiteColor]]; \t \t [super drawWithFrame: cellFrame inView: controlView]; \t \t [self setBackgroundColor: oldColor]; \t \t \t} 'nhưng không có gì xảy ra! Cảm ơn ... – Vassilis

+1

đã giải quyết: Chúng tôi nên sử dụng: '[self setDrawsBackground: YES]' first – Vassilis

+0

Bạn đã thực sự ghi đè '-drawInteriorWithFrame: inView:' chứ không phải '-drawWithFrame: inView:'? – UncleAli