Поскольку вы одобрили решение Scrubber, вот оно:
Во-первых, вам нужно создать экземпляр NSScrubber и вставить его в сенсорную панель. Убедитесь, что режим выбора будет фиксированным.
yourScrubber.mode = .fixed
Затем для выделения (просто чтобы контур был глазами, без этого контура все будет работать правильно) установите Selection Overlay Style на .outlineOverlay.
youtScrubber.mode = .selectionBackgroundStyle = .outlineOverlay
Затем установите делегатов для источника данных и для событий выбора.
yourScrubber.delegate = self
yourScrubber.dataSource = self
Затем верните количество элементов в скруббере
public func numberOfItems(for scrubber: NSScrubber) -> Int {
return 8
}
Теперь вам нужно вставить элементы (NSScrubberItemView). Который также может быть заполнен NScrubberImageItemView или NScrubberTextItemView или даже вашим собственным NSView.
Есть много способов заполнить содержимое скруббера, для простого случая, когда вы предоставляете изображения, это будет выглядеть так:
public func scrubber(_ scrubber: NSScrubber, viewForItemAt index: Int) -> NSScrubberItemView {
let itemView = scrubber.makeItem(withIdentifier: "colorIdentifier", owner: nil) as! NSScrubberImageItemView
itemView.image = yourImage
return itemView
}
Теперь вы должны увидеть что-то вроде этого: (я использовал случайные изображения для своего скруббера)
Также вы должны иметь возможность видеть (если вы включили схему) выбранные элементы:
Хорошо, а теперь самая важная часть, как получить желаемый эффект: (использование метода делегированного протокола)
public func scrubber(_ scrubber: NSScrubber, didHighlightItemAt highlightedIndex: Int) {
print("highlight = \(highlightedIndex)")
//your code here
}
Что приводит к чему-то вроде этого: (обратите внимание на окно вывода)
Вы также можете добавить интервал между ячейками, определяя ширину ячейки:
func scrubber(_ scrubber: NSScrubber, layout: NSScrubberFlowLayout, sizeForItemAt itemIndex: Int) -> NSSize {
return NSSize(width: yourWidth, height: 30)
}
Также, возможно, вы найдете применение для:
optional public func scrubber(_ scrubber: NSScrubber, didSelectItemAt selectedIndex: Int)
person
Roman Roba
schedule
02.08.2017