20

我正在尝试实现 a UICollectionViewinside a UIView,但我不知道该怎么做。有很多关于如何使用UICollectionViewa的教程UICollectionViewController,但没有关于如何在常规视图中实现的教程。你是怎样做的?

4

4 回答 4

34

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中,设置您的delegatedataSource.

_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>.

UICollectionViewDataSource 协议文档

UICollectionViewDelegate 协议文档

于 2013-02-14T13:42:28.143 回答
3

还有 Swift 版本

  1. 将 UICollectionView 拖入您的 UIView 并适当调整其大小。

  2. 修改您的 UIViewController 以扩展 UICollectionViewDataSource 和 UICollectionViewDelegate

  3. 实现所需的功能

  4. Control-Drag 从你的故事板到类以创建一个出口'collectionView'

  5. 在 viewDidLoad() 中,将委托和数据源连接到 self collectionView.delegate = selfcollectionView.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) {

        }
    }
于 2016-04-10T02:34:58.797 回答
2

将 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;        
}
于 2015-07-11T09:53:29.763 回答
1
  1. 将 uiviewcontroller 拖到故事板中。
  2. 为新的 uiviewcontoller 创建新的类文件
  3. 将新创建的类设置为我们的视图控制器。并将协议方法添加到 .h 文件中。-UICollectionViewDelegate,UICollectionViewDataSource
  4. 将uicollectionview拖到viewcontroller,默认会有一个uicollectionviewcell和collectionview。
  5. 为单元格自定义创建新类作为 uicollectionviewcell 的子类,并将该类设置为身份检查器中的单元格。还要在属性检查器中设置重用标识符,我们应该指定名称来标识 uicollectionviewcell。在这里说细胞。
  6. 在 uicollectionviewcell 中拖放一个 imageview(可以是任何你想要的东西),调整它的大小以适应它。
  7. 使用 imageview 设置图像(此图像将与 collectionview 重复显示)。
  8. 将带有 uicollectionview 的委托和数据源设置为相应的视图控制器。
  9. 设置数据源方法 - numberOfItemsInSection 和 cellForItemAtIndexPath。

  10. 使用 numberOfItemsInSection 方法返回所需的单元格计数。这里说10。

  11. 返回要使用 cellForItemAtIndexPath 显示的单元格。

    NSString *  identifier = @"cell";
    CollectionViewCellForDay * cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
    return cell;
    

到目前为止,您应该能够看到 10 个单元格集合视图 :)

于 2016-02-25T06:22:01.743 回答