#macos #cocoa #tags #swift4.2
#macos #cocoa #Теги #swift4.2
Вопрос:
Мне нужно скопировать всплывающее окно просмотра тегов, которое есть в Finder.[Просмотр тегов Finder]https://i.stack.imgur.com/QCufn.png, но с той разницей, что представление тегов должно находиться внутри scrollview с целью разрешения только 5 видимых строк тегов
Я начал с NSTextView, но когда я добавляю кнопку внутри TextView, текст всегда находится за тегами, то есть теги закрывают написанный текст. https://i.stack.imgur.com/eeJWy.png
Как я могу сделать что-то похожее на finder?
Спасибо
Редактировать
Я пытаюсь использовать NSTokenField, но что-то пошло не так, потому что scrollview не прокручивается:https://i.stack.imgur.com/sweDN.png
Это мой код:
class SearchTagView:NSScrollView {
lazy var tokenizer: NSTokenField = {
let tokenizer = NSTokenField(string: "")
tokenizer.isEnabled = true
tokenizer.isSelectable = true
tokenizer.isEditable = true
tokenizer.tokenStyle = NSTokenField.TokenStyle.squared
tokenizer.font = NSFont(name: FontList.montserrat(weight: .medium).value, size: 13)
tokenizer.textColor = .red
tokenizer.cell?.image = nil
tokenizer.cell?.wraps = true
tokenizer.cell?.isScrollable = false
tokenizer.usesSingleLineMode = false
tokenizer.autoresizingMask = [.width, .height]
return tokenizer
}()
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
translatesAutoresizingMaskIntoConstraints = false
addSubview(tokenizer)
tokenizer.translatesAutoresizingMaskIntoConstraints = false
tokenizer.pinToSuperView()
}
override func viewDidMoveToSuperview() {
super.viewDidMoveToSuperview()
documentView = tokenizer
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Замечание:
Scrollview привязан к superview в начале, конце и сверху, и его высота составляет от 35 до 75 дюймов с ограничениями:
NSLayoutConstraint.activate([
searchTagView.topAnchor.constraint(equalTo: contentView.topAnchor),
searchTagView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16),
searchTagView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -16),
searchTagView.heightAnchor.constraint(greaterThanOrEqualToConstant:35),
searchTagView.heightAnchor.constraint(lessThanOrEqualToConstant:70),
])
Комментарии:
1. Вы смотрели на NSTokenField?
2. @Marek H Как я могу изменить цвет токенов?. Спасибо
3. // Этот метод позволяет изменять стиль для отдельных токенов, а также создавать смешанный текст и токены. — (NSTokenStyle)tokenField:(NSTokenField *)tokenField styleForRepresentedObject:(id)Представленный объект;
4. @MarekH Не могли бы вы привести мне пример, пожалуйста?
5. 1. Не создавайте подкласс scrollview. Создаем подкласс NSView и устанавливаем его как documentView из scrollview. 2. Подкласс NSTokenField и переопределяющий его tokenField: styleForRepresentedObject: 3. Если вам нужно NSTokenField большого размера, найдите ключевые слова «nstextfield с гибкой высотой» — NSTokenField является подклассом NSTextField.