Tôi đang thử nghiệm API mới NSCollectionView
, được giới thiệu ở El Capitan.Dữ liệu NSCollectionViewNguồn không hoạt động đúng
Theo dõi video WWDC, tôi tạo một lớp con của NSCollectionViewFlowLayout
để xác định bố cục của chế độ xem bộ sưu tập.
class Layout : NSCollectionViewFlowLayout {
override func prepareLayout() {
super.prepareLayout()
self.minimumInteritemSpacing = 0
self.minimumLineSpacing = 0
let cheight = self.collectionView!.bounds.height
let cwidth = self.collectionView!.bounds.width
self.itemSize = CGSizeMake(cwidth/2.0, cheight/6.0)
}
}
Sau đó, tôi đã tạo một lớp con NSObject
làm nguồn dữ liệu.
class DataSource : NSObject, NSCollectionViewDataSource {
func collectionView(collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
return 5
}
func collectionView(collectionView: NSCollectionView, itemForRepresentedObjectAtIndexPath indexPath: NSIndexPath) -> NSCollectionViewItem {
/* DOESN'T GET CALLED! */
let item = collectionView.makeItemWithIdentifier("cell", forIndexPath: indexPath)
item.view.wantsLayer = true
item.view.layer?.backgroundColor = NSColor.redColor().CGColor
return item
}
}
Các vấn đề là collectionView:itemForRepresentedObjectAtIndexPath:
không bao giờ được gọi.
Đây là cách tôi khởi sự xem bộ sưu tập:
let collectionView = NSCollectionView(frame: view.bounds)
let dataSource = DataSource()
let layout = Layout()
collectionView.collectionViewLayout = layout
collectionView.registerClass(NSCollectionViewItem.self,
forItemWithIdentifier: "cell")
collectionView.dataSource = dataSource
collectionView.backgroundColors = [.blackColor()]
Tôi có thể thấy rõ quan điểm bộ sưu tập trong SuperView của nó, nhưng không có các tế bào.
Ngoài ra, dòng này, nếu được gọi bên ngoài đại biểu (nhưng sau khi lớp học được đăng ký) làm cho ứng dụng bị lỗi!
let item = collectionView.makeItemWithIdentifier("cell", forIndexPath: /*any index path*/)
Tôi có làm gì sai hoặc là NSCollectionView
API mới bị hỏng không?
Cảm ơn.
Đây có lẽ là một câu hỏi ngu ngốc nhưng bạn đang thêm chế độ xem bộ sưu tập vào các bản xem phụ của chế độ xem của bạn, phải không? – Aaron
@Aaron Tôi là. Tôi có thể thấy giao diện bộ sưu tập trong superview của nó (không có ô) –
làm thế nào để bạn biết phương pháp này không được gọi? bạn đã đặt một số điểm ngắt trong phương pháp đó chưa? hoặc cố gắng để đăng nhập một cái gì đó bên trong cơ thể của phương pháp? tệp 'cell.xib' của bạn trong cùng một gói? hoặc bạn tạo giao diện lập trình (vì bạn đã đăng ký một _class_ nhưng không phải là _nib_)? bạn đã thay đổi biểu mẫu lưu lượng của chế độ xem _ "cũ" thành ví dụ chưa _ "flow" _ trong IB? – holex