UICollectionView
内にUIView
を実装しようとしていますが、その方法がわかりません。 UICollectionView
をUICollectionViewController
と一緒に使用する方法については多くのチュートリアルがありますが、通常のビューで実装する方法についてはありません。どうやってそれをしますか?
1)UICollectionView
をUIView
にドラッグし、適切なサイズにします。
2)コレクションビューの.h
ファイルにIBOutlet
でもあるプロパティを作成します。
@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を拡張します
必要な機能を実装する
コントロール-ストーリーボードからクラスにドラッグして、アウトレット「collectionView」を作成します
ViewDidLoad()で、デリゲートとデータソースを自分自身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では、最初に-(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;
}
_
データソースメソッドを設定します-numberOfItemsInSectionおよびcellForItemAtIndexPath。
NumberOfItemsInSectionメソッドを使用して必要なセル数を返します。ここで10と言います。
CellForItemAtIndexPathで表示するセルを返します。
NSString * identifier = @"cell";
CollectionViewCellForDay * cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
return cell;
これで、10セルのコレクションビューを視覚的に確認できるようになります:)