UIView里面的UICollectionView

时间:2013-02-14 11:56:46

标签: xcode uiviewcontroller ios6 uicollectionview

我正在尝试在UICollectionView内部实施UIView,但我无法了解如何执行此操作。有很多关于如何将UICollectionViewUICollectionViewController一起使用的教程,而不是如何在常规视图中实现它。 你是怎么做到的?

4 个答案:

答案 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中,设置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>是{{1}的子类}}。

UICollectionViewDataSource Protocol Documentation

UICollectionViewDelegate Protocol Documentation

答案 1 :(得分:3)

和Swift版本

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

  2. 修改UIViewController以扩展UICollectionViewDataSource和UICollectionViewDelegate

  3. 实施所需的功能

  4. 控制 - 从故事板拖到课堂以创建插座'collectionView'

  5. 在viewDidLoad()中,将委托和数据源连接到self collectionView.delegate = selfcollectionView.dataSource = self

  6. 它应该看起来像这样:

        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)

  1. 将uiviewcontroller拖到stroryboard。
  2. 为新的uiviewcontoller
  3. 创建新的类文件
  4. 将新创建的类设置为viewcontroller。并将协议方法添加到.h文件中。 -UICollectionViewDelegate,UICollectionViewDataSource
  5. 将uicollectionview拖动到viewcontroller,默认情况下会有一个带集合视图的uicollectionviewcell。
  6. 为单元格自定义创建新类作为uicollectionviewcell的子类,并将类设置为标识检查器中的单元格。还要在属性检查器中设置重用标识符,我们应该指定用于标识uicollectionviewcell的名称。在这里说单元格。
  7. 在uicollectionviewcell内拖放一个imageview(可以是任何你想要的东西),调整它的大小。
  8. 使用imageview设置图像(此图像将与collectionview重复显示)。
  9. 使用uicollectionview将委托和数据源设置为相应的viewcontroller。
  10. 设置数据源方法 - numberOfItemsInSection和cellForItemAtIndexPath。

  11. 使用numberOfItemsInSection方法返回所需的细胞计数。在这里说10。

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

    NSString *  identifier = @"cell";
    CollectionViewCellForDay * cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
    return cell;
    
  13. 到目前为止,您应该可以看到10个单元格集合视图:)