我想用自定义单元格实现UICollectionView,之前我有:
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout
在我内部实施
func numberOfSections(in collectionView: UICollectionView) -> Int
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
它工作正常。现在我想实现更多与单元格选择相关的函数,但我也想要符合MVC模式,所以我试图将UICollectionView实现移动到另一个文件。然后我有:
class ViewController: UIViewController {
@IBoutlet var grid: UICollectionView!
ovverride func viewDidLoad() {
...
grid = GridView(grid.frame, GridLayout()) //GridLayout() is the layout file working fine
}
}
和另一个文件:
class GridView: UICollectionView, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
func numberOfSections(in collectionView: UICollectionView) -> Int {}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {}
}
但是如果运行它会给出错误:
collectionView:numberOfItemsInSection:]: unrecognized selector sent to instance
我在这里检查了链接:error,并尝试在ViewController中执行此操作:
grid.dataSource = grid as! UICollectionViewDataSource?
grid.delegate = grid as! UICollectionViewDelegate?
但它没有用。我可以知道如何解决这个问题吗?
修改 AppDelegate类给出了错误。我还尝试设置GridView的初始化程序:
override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
super.init(...)
self.dataSource = self
self.delegate = self
}
但它没有用。
答案 0 :(得分:0)
您应该尝试在GridView
类的初始化(frame:, layout:)
内设置GridView
的数据源和代理。
override init(...) {
super.init(...)
self.dataSource = self
self.delegate = self
}
你能否提一下给出错误的确切行?也许您仍然在UICollectionView
中使用了一些ViewController
相关代码?
答案 1 :(得分:-1)
你有没有尝试过;
grid.dataSource = self
grid.delegate = self
如果可行,则可以在此之后使用相同的委托和数据源函数中的标记自定义集合视图。