我正在尝试实现 a UICollectionView
inside a UIView
,但我不知道该怎么做。有很多关于如何使用UICollectionView
a的教程UICollectionViewController
,但没有关于如何在常规视图中实现的教程。你是怎样做的?
4 回答
1)将aUICollectionView
拖入您的UIView
并适当调整大小。
2)为集合视图创建一个属性,该属性也是IBOutlet
您的文件中的一个:.h
@property (nonatomic, retain) IBOutlet UICollectionView *myCollectionView;
3)再次在你的.h
文件中声明你的代表,所以现在你.h
应该看起来像这样:
@interface UtaQuickView : UIViewController <UICollectionViewDataSource, UICollectionViewDelegate> {
}
@property (nonatomic, retain) IBOutlet UICollectionView *myCollectionView;
4)连接你myCollectionView
IBOutlet
的故事板。
5)(可选)如果您的目标是任何早于 iOS6 的东西,请合成您的myCollectionView
属性。如果你的目标是 iOS6,它会为你自动合成。这适用于所有属性,而不仅仅是UICollectionViews
. 所以在iOS6中,你根本不需要@synthesize myCollectionView = _myCollectionView
。您可以_mycollectionview
在需要访问该属性的任何地方使用。
6)在您的.m
文件viewDidLoad
中,设置您的delegate
和dataSource.
_myCollectionView.delegate = self;
_myCollectionView.dataSource = self;
7)实现所需的dataSource方法:
#pragma mark - UICollectionView DataSource
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
从那里您可以根据需要实现尽可能多或尽可能少的UICollectionViewDelegate
方法。但是,根据文档需要 2 个:
#pragma mark - UICollectionViewDelegate
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingSupplementaryView:(UICollectionReusableView *)view forElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath
请务必注意,您可以替换<UICollectionViewDelegateFlowLayout>
并<UICollectionViewDelegate>
仍然可以访问其中的所有方法,<UICollectionViewDelegate>
因为<UICollectionViewDelegateFlowLayout>
它是<UICollectionViewDelegate>
.
还有 Swift 版本
将 UICollectionView 拖入您的 UIView 并适当调整其大小。
修改您的 UIViewController 以扩展 UICollectionViewDataSource 和 UICollectionViewDelegate
实现所需的功能
Control-Drag 从你的故事板到类以创建一个出口'collectionView'
在 viewDidLoad() 中,将委托和数据源连接到 self
collectionView.delegate = self
和collectionView.dataSource = self
它最终应该看起来像这样:
class CustomerViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate
{
@IBOutlet weak var collectionView: UICollectionView!
override func viewDidLoad() {
collectionView.delegate = self
collectionView.dataSource = self
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
}
func collectionView(collectionView: UICollectionView, didEndDisplayingCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) {
}
func collectionView(collectionView: UICollectionView, didEndDisplayingSupplementaryView view: UICollectionReusableView, forElementOfKind elementKind: String, atIndexPath indexPath: NSIndexPath) {
}
}
将 UICollectionView 拖入您的 UIView 并适当调整其大小。在集合视图的 .h 文件中创建一个也是 IBOutlet 的属性:
@property (nonatomic, retain) IBOutlet UICollectionView *myCollectionView;
在 UIView 首先你需要声明你的 UICollectionView 单元格-(void)awakeFromNib
[myCollectionView registerNib:[UINib nibWithNibName:@"nib file of collectionView cell" bundle:nil] forCellWithReuseIdentifier:@"identifier"];
然后
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
custom class *cell1=[collectionView dequeueReusableCellWithReuseIdentifier:@"identifier" forIndexPath:indexPath];
return cell1;
}
- 将 uiviewcontroller 拖到故事板中。
- 为新的 uiviewcontoller 创建新的类文件
- 将新创建的类设置为我们的视图控制器。并将协议方法添加到 .h 文件中。-UICollectionViewDelegate,UICollectionViewDataSource
- 将uicollectionview拖到viewcontroller,默认会有一个uicollectionviewcell和collectionview。
- 为单元格自定义创建新类作为 uicollectionviewcell 的子类,并将该类设置为身份检查器中的单元格。还要在属性检查器中设置重用标识符,我们应该指定名称来标识 uicollectionviewcell。在这里说细胞。
- 在 uicollectionviewcell 中拖放一个 imageview(可以是任何你想要的东西),调整它的大小以适应它。
- 使用 imageview 设置图像(此图像将与 collectionview 重复显示)。
- 将带有 uicollectionview 的委托和数据源设置为相应的视图控制器。
设置数据源方法 - numberOfItemsInSection 和 cellForItemAtIndexPath。
使用 numberOfItemsInSection 方法返回所需的单元格计数。这里说10。
返回要使用 cellForItemAtIndexPath 显示的单元格。
NSString * identifier = @"cell"; CollectionViewCellForDay * cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; return cell;
到目前为止,您应该能够看到 10 个单元格集合视图 :)