2016-08-17 3 views
0

私はストーリーボードに2つのNSTextFieldを持っていますが、どちらもクラスをサブクラスに変更した以外はデフォルト設定から変更されません。私はまた内部をサブクラス化しましたNSTextFieldCell。私はそれぞれ好みのものをカスタマイズしました。かなりシンプルなサブクラスです。最初の応答者であるテキストフィールドは期待どおりに表示されますが、他のテキストフィールドでは表示されません。そのセルのための白い背景を描いています。 2つのフィールドを切り替えると背景が切り替わります。この白い背景をセルから削除するにはどうすればよいですか?NSTextFieldCellは、最初のレスポンダでない場合にのみ白い背景を描画します

LoginTextField

- (void)baseInit { 
    self.drawsBackground = NO; 
    self.wantsLayer = YES; 
    self.backgroundColor = [[NSColor whiteColor] colorWithAlphaComponent:0.75]; 
    self.textColor = [NSColor blackColor]; 

    CALayer *layer = [[CALayer alloc] init]; 
    layer.backgroundColor = self.backgroundColor.CGColor; 
    layer.borderWidth = 0; 
    layer.cornerRadius = 6; 

    self.layer = layer; 
} 

LoginTextFieldCell:私はこの関数をオーバーライドする場合

- (void)baseInit { 
    self.drawsBackground = NO; 
    self.focusRingType = NSFocusRingTypeNone; 
} 

enter image description here

は、白い背景が消えますが、そうしないときに最初のプレースホルダやテキストラベルを行います応答者。

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

enter image description here

私はOS Xエルキャピタン上で実行して、Xcodeの7のアプリを開発しています。また、この問題を見た人のため

答えて

0

、私のために働いたソリューションは、NOborderedを設定し、代わりに新しいCALayerを作成するself.layerを設定することでした。

LoginTextField

- (void)baseInit { 
    self.drawsBackground = NO; 
    self.wantsLayer = YES; 
    self.textColor = [NSColor blackColor]; 
    self.bordered = NO; 

    self.layer.backgroundColor = [[NSColor whiteColor] colorWithAlphaComponent:0.75].CGColor; 
    self.layer.borderWidth = 0; 
    self.layer.cornerRadius = 6; 
} 
関連する問題