У меня есть следующий подкласс NSTextField
(с соответствующим подклассом NSTextFieldCell
для интервала [подход найден here]). Я пытаюсь изменить цвет рамки и цвет фона на «фокус», но он не работает.OSX NSTextField с цветом фона слоя не работает
class TGTextField: NSTextField {
override func viewWillDraw() {
self.layer?.borderWidth = 1
self.layer?.cornerRadius = 2
self.textColor = NSColor(calibratedRed: 55/255, green: 54/255, blue: 54/255, alpha: 1)
self.focusRingType = .None
self.font = NSFont(name: "ProximaNova-Medium", size: 16)!
setBlurredStyles()
}
private func setFocusedStyles() {
self.layer?.borderColor = NSColor(calibratedRed: 92/255, green: 188/255, blue: 214/255, alpha: 1).CGColor
self.layer?.backgroundColor = NSColor(calibratedRed: 247/255, green: 252/255, blue: 252/255, alpha: 1).CGColor
}
private func setBlurredStyles() {
self.layer?.borderColor = NSColor(calibratedRed: 221/255, green: 221/255, blue: 221/255, alpha: 1).CGColor
self.layer?.backgroundColor = NSColor.whiteColor().CGColor
}
override func becomeFirstResponder() -> Bool {
if super.becomeFirstResponder() {
dispatch_async(dispatch_get_main_queue(), {
self.setFocusedStyles()
})
return true
} else {
return false
}
}
override func resignFirstResponder() -> Bool {
if super.resignFirstResponder() {
dispatch_async(dispatch_get_main_queue(), {
self.setBlurredStyles()
})
return true
} else {
return false
}
}
}
class TGTextFieldCell: NSTextFieldCell {
override init(imageCell image: NSImage?) {
super.init(imageCell: image)
}
override init(textCell aString: String) {
super.init(textCell: aString)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func drawingRectForBounds(theRect: NSRect) -> NSRect {
let rectInset = NSMakeRect(theRect.origin.x + 7, theRect.origin.y + 7, theRect.size.width, theRect.size.height)
return super.drawingRectForBounds(rectInset)
}
}
На самом деле, кажется, что попытка установить self.layer?.backgroundColor
ни к чему нигде не работает. Я не могу просто установить backgroundColor
на текстовое поле, потому что на основе ячейки цвет фона смещается.
Как установить backgroundColor
на слой подкласса NSTextField
?
Благодарим вас за тщательный ответ!Однако я не могу избавиться от ячейки, если только не могу воспроизвести способ заполнения в текстовом поле, как это было в моем подклассе ячеек. Если вы можете указать мне на способ сделать это, я, безусловно, буду разорвать камеру (и принять ваш ответ :)). – jake
Я сказал, чтобы избавиться от ячейки только для этого конкретного фонового бизнеса. Вы можете держать свою камеру в курсе. Я просто вставил весь ваш код, и это сработало. 'class TGTextFieldCell: NSTextFieldCell { override func drawingRectForBounds (theRect: NSRect) -> NSRect { let rectInset = NSMakeRect (theRect.origin.x + 7, theRect.origin.y + 7, theRect.size.width, theRect. size.height) возвращение super.drawingRectForBounds (rectInset) } } 'Попробуйте сами. Возможно, вам придется изменить фактические номера. Прокладка выглядит немного глубже, чем нужно. –
Хорошо! Это отлично поработало, мне просто нужно было переопределить 'startFirstResponder', как и я, и вызвать' super.becomeFirstResponder', чтобы обернуть настройку переменной и вернуть true (возможно, это называется даже тогда, когда оно не становится первым ответчиком)? Есть ли причина, по которой я не должен этого делать, или могу ли я отредактировать ваш ответ, чтобы включить этот бит? – jake