我来自iOS开发,我想知道是否可以NSCollectionView像UICollectionViewiOS中那样以编程方式设置?并添加NSCollectionViewItemsin代码。还是设置a NSCollectionView使用绑定的唯一方法?
NSCollectionView
UICollectionView
NSCollectionViewItems
谢谢!
感谢@stevesliva为我指出了 。我将其转换为Swift。这就是我得到的。
我在ViewController中创建一个NSCollectionView:
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!) } }
在ViewController中创建的CollectionViewItem只需加载一个视图,即可在其中设置项目视图本身。
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! } }
视图本身:
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 } }
要设置按钮标题,我使用了一种技巧。(ViewController中的for循环)如果有更好的方法设置标题,请随时发表评论。