Dank @stevesliva für mich auf this SO answer zeigen. Ich habe es in Swift umgewandelt. Das habe ich bekommen.
Ich bin ein NSCollectionView in der Viewcontroller zu schaffen:
import Cocoa
class ViewController: NSViewController {
var titles = [String]()
var collectionView: NSCollectionView?
override func viewDidLoad() {
super.viewDidLoad()
self.titles = ["Banana", "Apple", "Strawberry", "Cherry", "Pear", "Pineapple", "Grape", "Melon"]
collectionView = NSCollectionView(frame: self.view.frame)
collectionView!.itemPrototype = CollectionViewItem()
collectionView!.content = self.titles
collectionView!.autoresizingMask = NSAutoresizingMaskOptions.ViewWidthSizable | NSAutoresizingMaskOptions.ViewMaxXMargin | NSAutoresizingMaskOptions.ViewMinYMargin | NSAutoresizingMaskOptions.ViewHeightSizable | NSAutoresizingMaskOptions.ViewMaxYMargin
var index = 0
for title in titles {
var item = self.collectionView!.itemAtIndex(index) as! CollectionViewItem
item.getView().button?.title = self.titles[index]
index++
}
self.view.addSubview(collectionView!)
}
}
Die erstellte CollectionViewItem im Viewcontroller laden Sie einfach einen Blick, wo ich selbst das Element Ansicht einrichten.
import Cocoa
class CollectionViewItem: NSCollectionViewItem {
var itemView: ItemView?
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
}
override func loadView() {
self.itemView = ItemView(frame: NSZeroRect)
self.view = self.itemView!
}
func getView() -> ItemView {
return self.itemView!
}
}
Die Ansicht selbst:
import Cocoa
class ItemView: NSView {
let buttonSize: NSSize = NSSize(width: 100, height: 20)
let itemSize: NSSize = NSSize(width: 120, height: 40)
let buttonOrigin: NSPoint = NSPoint(x: 10, y: 10)
var button: NSButton?
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
// Drawing code here.
}
override init(frame frameRect: NSRect) {
super.init(frame: NSRect(origin: frameRect.origin, size: itemSize))
let newButton = NSButton(frame: NSRect(origin: buttonOrigin, size: buttonSize))
newButton.bezelStyle = NSBezelStyle.RoundedBezelStyle
self.addSubview(newButton)
self.button = newButton;
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setButtonTitle(title: String) {
self.button!.title = title
}
}
die Schaltfläche Titel setzen, ich bin mit Art ein Hack. (die For-Schleife im ViewController) Wenn es eine bessere Möglichkeit gibt, den Titel zu setzen, können Sie gerne einen Kommentar hinterlassen.
die letzte Frage zu beantworten, nein, die Sie nicht brauchen Bindungen verwenden. Es gibt keine Ansicht oder Kontrolle, für die Sie Bindungen verwenden müssen. – stevesliva
Aber wie kann ich es ohne Bindungen tun? – stefOCDP
Konvertieren [this] (http://stackoverflow.com/questions/8660626/how-to-create-nscollectionview-programatically-from-scratch) zu swift. – stevesliva