2016-07-18 4 views
0

My NSTextField имеет закругленные углы и белый цвет фона, но кажется, что сам вид прямоугольный. Это означает, что пространство между закругленными углами и ограничивающим прямоугольником показано как прозрачное. Как я могу заполнить эту область, чтобы она не выделялась?Округленный NSTextField рисует прозрачными углами?

Изображение:

The NSTextField with terrible corners.

Код:

let textFieldLayer = CALayer() 
textField.layer = textFieldLayer 
textField.backgroundColor = NSColor.whiteColor() 
textField.layer?.backgroundColor = NSColor.whiteColor().CGColor 
textField.layer?.borderColor = NSColor(calibratedRed: 47/255.0, green: 146/255.0, blue: 204/255.0, alpha: 1.0).CGColor 
textField.layer?.borderWidth = 1 
textField.layer?.cornerRadius = 7 
+0

Как вы огибая углы точно? –

+0

Пожалуйста, покажите код, который вы попробовали. –

+0

Добавлен код выше. Спасибо за помощь. – user3225395

ответ

0

Я сделал это подклассов NSTextField и опрокинув его метод DrawRect:

override func drawRect(dirtyRect: NSRect) { 
    super.drawRect(dirtyRect) 
    var bounds: NSRect = self.bounds 
    var border: NSBezierPath = NSBezierPath(roundedRect: NSInsetRect(bounds, 0.5, 0.5), xRadius: 3, yRadius: 3) 
    NSColor(red: 47/255.0, green: 146/255.0, blue: 204/255.0, alpha: 1.0).set() 
    border.stroke() 
} 
+1

Это достойный способ решить исходную проблему, хотя, если используется кольцо фокуса, оно испытывает аналогичную проблему; это легко исправить, хотя, если вы его переопределите. –

0

Я знаю, что это старый, но в случае, если другие здесь ищут. Я нашел this post на Средстве, чтобы оказать огромную помощь при настройке NSTextField. Это использует CALayer текстового поля. Вот отрывок из ссылки на соответствующий бит:

override fun viewDidLoad() { 
super.viewDidLoad() 
inputTextField.wantsLayer = true 
let textFieldLayer = CALayer() 
inputTextField.layer = textFieldLayer 
inputTextField.backgroundColor = fieldBackgroundColor 
inputTextField.layer?.backgroundColor = fieldBackgroundColor.cgColor 
inputTextField.layer?.borderColor = fieldBorderColor.cgColor 
inputTextField.layer?.borderWidth = 1 
inputTextField.layer?.cornerRadius = 5 
inputTextField.textColor = fieldTextColor 
} 

отметить также, что, если вы futzed вокруг с настройками по умолчанию NSTextField в в IB, вы можете не получить ожидаемые результаты. Я обнаружил, что этот подход не работает правильно, если выбор граница была ничем иным, чем первый вариант:

Only the first will do.

+0

Возможно, проблема с OP связана с отсутствием «inputTextField.wantsLayer = true» – Schule

Смежные вопросы