我正在尝试在UICollectionView
内部实施UIView
,但我无法了解如何执行此操作。有很多关于如何将UICollectionView
与UICollectionViewController
一起使用的教程,而不是如何在常规视图中实现它。
你是怎么做到的?
答案 0 :(得分:34)
1)将UICollectionView
拖到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>
是{{1}的子类}}。
答案 1 :(得分:3)
和Swift版本
将UICollectionView拖入您的UIView并适当调整大小。
修改UIViewController以扩展UICollectionViewDataSource和UICollectionViewDelegate
实施所需的功能
控制 - 从故事板拖到课堂以创建插座'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) {
}
}
答案 2 :(得分:2)
将UICollectionView拖入UIView并适当调整大小。 在集合视图的.h文件中创建一个也是IBOutlet的属性:
@property (nonatomic, retain) IBOutlet UICollectionView *myCollectionView;
首先,在UIView中你需要在-(void)awakeFromNib
中声明你的UICollectionView单元格
[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;
}
答案 3 :(得分:1)
设置数据源方法 - numberOfItemsInSection和cellForItemAtIndexPath。
使用numberOfItemsInSection方法返回所需的细胞计数。在这里说10。
返回要使用cellForItemAtIndexPath显示的单元格。
NSString * identifier = @"cell";
CollectionViewCellForDay * cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
return cell;
到目前为止,您应该可以看到10个单元格集合视图:)