سؤال
أنا أحاول أن فئة فرعية NSCell
لرسم تسليط الضوء على خلفية مخصصة.يبدو أن الوثائق تشير إلى أن الغلبة highlight:withFrame:inView:
يجب أن تسمح لي بالقيام بذلك ولكن لا يتم استدعاء الطريقة أبدا.
بدلا من ذلك ، لقد تجاوزت drawInteriorWithFrame:inView:
الذي يعمل بشكل جيد-يمكنني رسم ما أريد في الخلية.ومع ذلك ، فإن المسألة هي أن لدي لرسم كل شيء نفسي ، وفقدان وظيفة نوع نسيل أنا تمديد - على سبيل المثال قدرة نستكستفيلدسيل لعرض النص:
خلية مميزة مرسومة حسب الطلب:
ومع ذلك ، أريد فقط إعادة رسم الخلفية (التمييز) ، والاحتفاظ بالقدرة على استخدام الوظيفة الرئيسية للخلية الموسعة:
يمكنني بالطبع رسم النص بنفسي أيضا ، لكنني آمل أن تكون هناك طريقة أسهل للقيام بذلك.
أي مساعدة هو محل تقدير كبير.
المحلول
بفضل مساعدة @ بافاريوس لقد تمكنت من العمل بها.بلدي الموسعة نستكستفيلدسيل فئة التنفيذ يحتوي الآن:
-(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];
}
المفتاح هو التأكد من العودة nil
ل highlightColorWithFrame:inView:
لوقف drawInteriorWithFrame:inView:
رسم خلفية ومع ذلك لا يزال يطلق عليه لرسم المحتوى الرئيسي (في هذه الحالة النص).