@stevesliva bana this SO answer numaralı telefonu işaret ettiğinden dolayı teşekkür ederiz. Onu Swift'e dönüştürdüm. Elime geçen bu.
Ben viewController bir NSCollectionView oluşturma: viewController içinde
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!)
}
}
oluşturulan CollectionViewItem Sadece madde görünümünü kendisi ayarlanmış bir görünüm yükleyin.
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!
}
}
görünüm kendisi:
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
}
}
düğme başlığıyla ayarlamak için, bir hack tür kullanıyorum. (ViewController'da for-loop) Eğer başlığı ayarlamak için daha iyi bir yol varsa, lütfen yorum bırakabilirsiniz.
son soruya cevap vermek için, hayır, basit gerekmez bulunuyor Bağlamaları kullanmak. Bağlamaları kullanmanız gereken bir görünüm veya denetim yoktur. – stevesliva
Ama bunu bağlama olmadan nasıl yapabilirim? – stefOCDP
[Bu] 'yı (http://stackoverflow.com/questions/8660626/how-to-create-nscollectionview-programatically-from-scratch) hızlıca dönüştürün. – stevesliva