Swift/OSX - отключение кольца фокусировки на настроенном NSSecureTextField

Я пробую некоторые стили NSTextFields, чтобы получить однострочные текстовые поля, такие как Material Design. С обычными NSTextFields у меня нет проблем, все работает довольно хорошо. Я создаю подкласс NSTextFieldCell и рисую свою собственную ячейку (просто с границей 1px внизу).

Код выглядит так:

override func drawWithFrame(cellFrame: NSRect, inView controlView: NSView) {
        //let path:NSBezierPath = NSBezierPath.init(rect: cellFrame)
        //path.fill()
        var customRect = cellFrame
        customRect.origin.y = cellFrame.size.height - 1
        customRect.origin.x = 0;
        let usedColor:NSColor = NSColor.grayColor()
        usedColor.setFill()
        let path = NSBezierPath.init(rect: customRect)
        path.fill()
        
        super.drawWithFrame(cellFrame, inView: controlView);
    }

Я добавляю подкласс в конструкторе интерфейсов и назначаю его моему TextField(Cell). Все нормально работает с обычными текстовыми полями.

Но теперь я хочу сделать то же самое с NSSecureTextFields, но результат странный. Кольцо фокусировки видно, хотя я установил его на НЕТ.

Исходный код NSSecureTextFieldCell такой же, как и приведенный выше (конечно, с той разницей, что я подклассифицировал NSSecureTextFieldCell, а не NSTextFieldCell), но почему он не показывает линию внизу ячейки? И почему я получаю проклятое кольцо фокуса, когда я назначаю свой CustomCell-класс ячейке? Я просто не понимаю этого, и это сводит меня с ума.

Загрузите файл проекта Xcode здесь (36 КБ)

2 ответа

Вы можете использовать следующий код, чтобы удалить кольцо фокусировки в viewDidLoad

self.SecuredTextField.focusRingType = NSFocusRingType.None

У меня была такая же проблема, и я решил ее с помощью стандартного NSTextField с NSSecureTextFieldCell подкласс как его класс ячейки.

Другие вопросы по тегам