20

UICollectionView内部を実装しようとしてUIViewいますが、その方法がわかりません。UICollectionViewでの使用方法に関するチュートリアルはたくさんありますがUICollectionViewController、通常のビューで実装する方法はありません。どうやってそれをしますか?

4

4 に答える 4

34

1)をドラッグしUICollectionViewUIView適切なサイズにします。

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 キーを押しながらドラッグして、アウトレット「collectionView」を作成します。

  5. viewDidLoad() で、デリゲートとデータソースを自分自身に接続し 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 に答える