在带有 xib 文件的 UIView 中使用 CollectionView
Using CollectionView in UIView with xib file
我正在做这个,我想使用 CollectionView,但我没有看到原型单元格,也不知道在这种情况下如何使用 CollectionView,有人可以帮助我吗?
我尝试这样使用,但它比 UICollectionView 更耗时且难以管理
好的,首先你必须拥有集合视图的 IBOutlet 并实现这样的方法
class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource,UICollectionViewDelegateFlowLayout{
@IBOutlet var collectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
count = 9;
let nib = UINib(nibName: "yourItemView", bundle: nil)
collectionView.registerNib(nib, forCellWithReuseIdentifier: "yourItemView")
self.collectionView.delegate = self
self.collectionView.dataSource = self
}
在添加 xib 文件的函数中确定,接下来必须创建从 UICollectionViewCell 扩展的文件,完成此操作后必须重写下一个方法
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return count
// the numbers of items
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {//size of your item for screen sizes
let wsize = UIScreen.mainScreen().bounds.size.width
switch(wsize){
case 414:
return CGSize(width: 190, height: 102)
case 375:
return CGSize(width: 190, height: 102)
case 320:
return CGSize(width: 174, height: 102)
default:
return CGSize(width: 174, height: 102)
}
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("yourItemView", forIndexPath: indexPath) as! yourItemView
return cell
}
就这些了,祝你好运
使用 UICollectionView 的主要方式是以编程方式管理逻辑。
首先,创建一个继承自UICollectionViewCell
的新class。选择是否要包含 xib 以轻松设计您的单元格:
使用 Interface Builder 或以编程方式设计单元格。
创建你的主视图控制器,包括一个 xib(或故事板),里面有 collection view 并且 link 它到相关的 class 通过界面生成器。或者,您可以通过编程方式将集合视图添加到 UIViewController
使目标视图控制器符合 UICollectionViewDelegate
和 UICollectionViewDataSource
协议,方法是在父 class:
之后声明它们
class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {
@IBOutlet weak var collectionView: UICollectionView!
//...
}
在 viewDidLoad
方法中为您的单元格注册关联的笔尖或 class 并将数据源和委托协议关联到视图控制器 class:
let cellIdentifier = "cellIdentifier"
override func viewDidLoad() {
super.viewDidLoad()
//if you use xibs:
self.collectionView.register(UINib(nibName:"MyCollectionCell", bundle: nil), forCellWithReuseIdentifier: cellIdentifier)
//or if you use class:
self.collectionView.register(MyCollectionCell.self, forCellWithReuseIdentifier: cellIdentifier)
self.collectionView.delegate = self
self.collectionView.dataSource = self
}
实现 UICollectionViewDelegate
和 UICollectionViewDataSource
协议中声明的方法:
let objects = ["Cat", "Dog", "Fish"]
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.objects.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath) as! MyCollectionCell
//in this example I added a label named "title" into the MyCollectionCell class
cell.title.text = self.objects[indexPath.item]
return cell
}
运行 您在模拟器(或真实设备)中的应用程序以及.. Et voilà! :)
更多信息:https://developer.apple.com/reference/uikit/uicollectionview
我正在做这个,我想使用 CollectionView,但我没有看到原型单元格,也不知道在这种情况下如何使用 CollectionView,有人可以帮助我吗?
我尝试这样使用,但它比 UICollectionView 更耗时且难以管理
好的,首先你必须拥有集合视图的 IBOutlet 并实现这样的方法
class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource,UICollectionViewDelegateFlowLayout{
@IBOutlet var collectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
count = 9;
let nib = UINib(nibName: "yourItemView", bundle: nil)
collectionView.registerNib(nib, forCellWithReuseIdentifier: "yourItemView")
self.collectionView.delegate = self
self.collectionView.dataSource = self
}
在添加 xib 文件的函数中确定,接下来必须创建从 UICollectionViewCell 扩展的文件,完成此操作后必须重写下一个方法
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return count
// the numbers of items
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {//size of your item for screen sizes
let wsize = UIScreen.mainScreen().bounds.size.width
switch(wsize){
case 414:
return CGSize(width: 190, height: 102)
case 375:
return CGSize(width: 190, height: 102)
case 320:
return CGSize(width: 174, height: 102)
default:
return CGSize(width: 174, height: 102)
}
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("yourItemView", forIndexPath: indexPath) as! yourItemView
return cell
}
就这些了,祝你好运
使用 UICollectionView 的主要方式是以编程方式管理逻辑。
首先,创建一个继承自
UICollectionViewCell
的新class。选择是否要包含 xib 以轻松设计您的单元格:使用 Interface Builder 或以编程方式设计单元格。
创建你的主视图控制器,包括一个 xib(或故事板),里面有 collection view 并且 link 它到相关的 class 通过界面生成器。或者,您可以通过编程方式将集合视图添加到
UIViewController
使目标视图控制器符合
之后声明它们UICollectionViewDelegate
和UICollectionViewDataSource
协议,方法是在父 class:class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource { @IBOutlet weak var collectionView: UICollectionView! //... }
在
viewDidLoad
方法中为您的单元格注册关联的笔尖或 class 并将数据源和委托协议关联到视图控制器 class:let cellIdentifier = "cellIdentifier" override func viewDidLoad() { super.viewDidLoad() //if you use xibs: self.collectionView.register(UINib(nibName:"MyCollectionCell", bundle: nil), forCellWithReuseIdentifier: cellIdentifier) //or if you use class: self.collectionView.register(MyCollectionCell.self, forCellWithReuseIdentifier: cellIdentifier) self.collectionView.delegate = self self.collectionView.dataSource = self }
实现
UICollectionViewDelegate
和UICollectionViewDataSource
协议中声明的方法:let objects = ["Cat", "Dog", "Fish"] func numberOfSections(in collectionView: UICollectionView) -> Int { return 1 } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return self.objects.count } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath) as! MyCollectionCell //in this example I added a label named "title" into the MyCollectionCell class cell.title.text = self.objects[indexPath.item] return cell }
运行 您在模拟器(或真实设备)中的应用程序以及.. Et voilà! :)
更多信息:https://developer.apple.com/reference/uikit/uicollectionview