NSSearchField: как скрыть значок и рамку?

Это своего рода дубликат этого вопроса. Поскольку все, что я знаю о Swift, - это Swift3, мне интересно, может ли кто-нибудь «перевести» предложенное решение в этом ответе.

Также:

Я сделал NSSearchfield без рамки, поместил его в рамку, и он все еще показывает серую рамку. Мне было бы любопытно, как отключить анимированную серую рамку и, возможно, даже как изменить цвет серой строки «поиск».

Мой уродливый результат теперь выглядит так:

введите здесь описание изображения

Было бы здорово, если бы кто-нибудь сказал мне, как управлять этим сложным полем NSSearch.

//ОБНОВИТЬ

Согласно ответу firstinq, значок исчез, и это здорово. Но все же есть эта тревожная анимированная серая рамка. Чего я не могу понять: NSSearchFielt находится внутри NSView (синяя рамка). Итак, все, что находится за пределами NSView, должно быть скрыто, верно? Так почему же я все еще вижу серую рамку? cell.isBordered = falseне действует. Любые советы, как справиться с этим?

введите здесь описание изображения

Вот как я рисую границу NSView:

class SearchFieldBorder: NSView {

    override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)

        self.layer?.borderWidth = 1
        self.layer?.borderColor = NSColor.blue.cgColor
    }
}

person Josch Hazard    schedule 21.07.2017    source источник


Ответы (2)


Чтобы скрыть значок: приведите ячейку к NSSearchFieldCell и установите для свойства searchButtonCell ячейки значение прозрачности. Возможная версия swift3:

if let cell = self.searchField.cell as? NSSearchFieldCell {
    cell.searchButtonCell?.isTransparent = true
}

Здесь searchField - это NSSearchField

Чтобы удалить границу фокуса:

searchField.focusRingType = .none

Чтобы изменить серую линию/курсор, было бы лучше создать подкласс NSSearchField и переопределить методы. Вы можете получить представление о здесь.

person firstinq    schedule 21.07.2017
comment
Это определенно прогресс. Спасибо за перевод!. - person Josch Hazard; 21.07.2017
comment
Пожалуйста. Как вы создали NSView с границами. Можете ли вы опубликовать код? Он случайно не прозрачный? - person firstinq; 21.07.2017
comment
@JoschHazard, я обновил ответ, указав возможное решение по удалению границы фокуса. Можешь попробовать? - person firstinq; 21.07.2017
comment
Я только что опубликовал код. Сам NSView, конечно же, прозрачен. Но я не думаю, что это граница. - person Josch Hazard; 21.07.2017
comment
Это просто потрясающе. FocusRingType, как ты это нашел? В любом случае, спасибо. - person Josch Hazard; 21.07.2017
comment
Потребовалось время, чтобы пройтись по свойствам. Давно не занимался разработкой какао/макинтош :) - person firstinq; 21.07.2017

Дополню ответ выше. Чтобы скрыть значок поиска, присвойте свойству SearchButtonCell значение nil.

if let cell = searchField.cell as? NSSearchFieldCell {
      cell.searchButtonCell = nil
}
person Vasiliy Neskafe    schedule 01.03.2021