2011-04-16 11 views
22

Arabirim Oluşturucusu'nda kurduğum NSTextFields'ın gölgeleri olmasını isterim. Bunu yapmak için işe yarayacak bir yol yaptım, ama doğru yol olup olmadığından emin değilim.Gölge ile NSTextField?

Yaptığım şey, NSTextFieldCell alt sınıfını aşağıdaki gibi subclass ve sonra alt sınıfımı IB'de NSTextField'ın hücre türü olarak ayarladı. Bu yaklaşımla ilgili bir problem var mı? Daha iyi bir yolu var mı?

#import "ShadowTextFieldCell.h" 

static NSShadow *kShadow = nil; 

@implementation ShadowTextFieldCell 

+ (void)initialize 
{ 
    kShadow = [[NSShadow alloc] init]; 
    [kShadow setShadowColor:[NSColor colorWithCalibratedWhite:0.f alpha:0.08f]]; 
    [kShadow setShadowBlurRadius:0.f]; 
    [kShadow setShadowOffset:NSMakeSize(0.f, -2.f)]; 
} 

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView 
{ 
    [kShadow set]; 
    [super drawInteriorWithFrame:cellFrame inView:controlView]; 
} 

@end 
+1

Tam olarak böyle yapmanız gerekiyor. Bu meraklısı, gölge-alan sınıfınızı bir IB eklentisi ile kendi paketine koymaktır, ve daha sonra IB düzeni sırasında gölgeyi sizin için gerçekleyebilir; Ancak bu şekilde overkill ve IB eklentileri (geçici olarak) xcode 4'te MIA'dır. – rgeorge

cevap

8

Bu yaklaşımın yanlış bir tarafı yoktur. Diğer seçenek (metin alanını geri katman [textField setWantsLayer:YES] arayıp CALayer 'ın gölge özelliklerini kullanmak olacaktır, ancak bu genellikle Çekirdek Animation metin oluşturma altpiksel düzgünleştirme olmadığı için bunu yapmak için istenmeyen bir yoldur. Aksine alt sınıf daha

1

kolay yolu

[[yourTextField cell] setBackgroundStyle:NSBackgroundStyleRaised]; 
012 olduğunu

, zpasternack'in dediği gibi, ancak bu sadece varsayılan bir gölgeleme için kullanılır, özel bir alt sınıf için veya katmanı kullanın ...