我应该首先说我对swift很新。我试图让我的视图控制器尽可能干净。 我创建了以下类
class AlbumArtist: UICollectionView, UICollectionViewDataSource, UICollectionViewDelegate {
var musicLib = musicLibrary()
var albumCollection: UICollectionView!
var layout: CustomCollectionViewFlow!
init(albumCView: UICollectionView){
let nib = UINib(nibName: "CollectionViewCell", bundle: nil)
albumCollection = albumCView
musicLib.loadAlbums()
layout = CustomCollectionViewFlow()
print(layout)
super.init(frame: albumCollection.frame, collectionViewLayout: layout)
albumCollection.registerNib(nib, forCellWithReuseIdentifier: "item")
}
required init?(coder: NSCoder) {
musicLib.loadAlbums()
layout = CustomCollectionViewFlow()
super.init(coder: coder)
}
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return musicLib.getAlbumsCount()
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell: CollectionViewCell = albumCollection.dequeueReusableCellWithReuseIdentifier("item", forIndexPath: indexPath) as! CollectionViewCell
let objects = musicLib.getAlbums().objectAtIndex(indexPath.item) as! MPMediaItemCollection
let repObjects = objects.representativeItem
cell.lbl_Name.text = repObjects!.valueForProperty(MPMediaItemPropertyAlbumTitle) as? String
let artwork = repObjects!.valueForProperty(MPMediaItemPropertyArtwork)
let artworkImage = artwork?.imageWithSize(CGSize(width: 230, height: 230))
if(artworkImage != nil){
cell.img_artwork.image = artworkImage
}
else{
cell.img_artwork.image = UIImage(named: "no_Artwork.png")
}
return cell
}
}
但是我的init方法出错了。必须调用超类&UUCollectionView'
的指定初始值设定项我不确定我做的是否正确我无法找到有关如何执行此操作的任何示例。因此,如果我完全错了,我很乐意听取我需要做的事情。
编辑:我更新了我的代码并且它现在正在运行。但是它永远不会出现在委托方法中,因此集合视图永远不会被填充。我用新代码更新了帖子中的代码。 在我的viewController中,我在viewDidLoad 中调用上面的类AlbumArtist(albumCView: AlbumCollectionView)
我不确定我所做的是否正确
答案 0 :(得分:1)
您尝试从UICollectionView
类继承,它根本没有任何问题,但有几种方法可以创建UICollectionView
而不从类UICollectionView
继承:
@IBOutlet
内为UICollectionView
创建UIViewController
。UICollectionViewController
以使用Interface Builder管理所有内容UIContainerView
内创建UIViewController
以放入UICollectionViewController
。我希望这对你有所帮助。
答案 1 :(得分:0)
Apple将指定的初始值设定义定义为"类的主要初始值设定项。指定的初始化程序完全初始化该类引入的所有属性,并调用适当的超类初始化程序以继续超类链的初始化过程。"
基本上用于UICollectionView,而不是仅调用 super.init() 哪个不是指定的初始化程序,你应该打电话 super.init(frame:CGRect,collectionViewLayout:UICollectionViewLayout)