タイトルが示すように、私はUICollectionView
をIBを通じてUIViewController
に接続しています。 UICollectionView
という名前のimageCell
サブクラスがあります。 viewcontroller viewDidLoad
メソッドで、次のようにクラスを登録します。
CGRect collectionViewRect = CGRectMake(384, 60, 728, 924);
UICollectionViewFlowLayout *flow = [[UICollectionViewFlowLayout alloc] init];
imageCollectionView = [[UICollectionView alloc] initWithFrame:collectionViewRect collectionViewLayout:flow];
[imageCollectionView registerClass:[imageCell class] forCellWithReuseIdentifier:@"Cell"];
imageCollectionView.delegate = self;
imageCollectionView.dataSource = self;
次に、サービスから写真を取得するgetPhotos
のviewDidAppear
と呼ばれるメソッド(UIの理由)を呼び出し、次にgetPhotos
内の[imagCcollectionView reloadData];
を呼び出します。
次に、cellForItemAtIndexPath
で次のことを行います。
imageCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
GRKAlbum *album = [albums objectAtIndex:indexPath.item];
cell.titleLabel.text = album.name;
return cell;
メソッドが呼び出されており、cell
がnil
ではなく、どちらもalbum
ではないため、ここでは何も問題が発生していません。
したがって、このコードをすべて実行すると、UICollectionView
が表示されますが、何も含まれていません。私が見ることができるのは、collectionView
の背景色だけです。どんな助けでも大歓迎です。
注:作成したimageCell
クラスのXIBを作成せず、ストーリーボードを使用しています。
この状況をデバッグする方法はいくつかあります。
customCellの代わりにICollectionViewCellクラスを登録し、cellForItem...
にセルの背景色を設定します
ステップでセルが表示されている場合は、独自のセルクラスを使用してその背景を設定してみてください
ストーリーボードを使用していますか?その後..
コレクションビューにセルを登録する必要はありません。プロトタイプセルを使用できます。セルに適切なIDを指定するだけです。プロトタイプセルのすべてをデザインできます。すべてのケースでカスタムクラスが必要なわけではありません。
ストーリーボードにセルを作成した場合は、クラスの登録ステートメントを削除するだけです。ストーリーボードでセルを作成する場合、コレクションビューまたはテーブルビューの場合は何も登録する必要はありません(実際にそうすると、問題が発生します)。行う必要があるのは、IBで識別子を設定することだけです。
同じ問題を従来のregistercell
行を次の行に置き換えることで修正しました
_[self.collection registerNib:[UINib nibWithNibName:@"nibname" bundle:nil] forCellWithReuseIdentifier:identifier];
_
Swift 4.2バージョン:(Nikolay Suvandzhievに感謝)
self.collection.register(UINib(nibName: "nibname", bundle: nil), forCellWithReuseIdentifier: identifier)
コレクションビューのセルがナビゲーションバーに隠れていることに気付いたとき、私はダミーのように感じました。ナビゲーションバー(ある場合)が、テストするコレクションビューのセルを覆っていないことを確認してください。
コードで新しいコレクションビューをインスタンス化していますが、ビューを画面に追加していません。ストーリーボードを既に使用しているとのことですが、おそらく、データソースやデリゲートに接続されていないストーリーボードのコレクションビューが表示されていると思います。それか、正しいコレクションビューでreloadを呼び出していません。
ストーリーボードでコレクションビューを構成する(そして、コードで実行する必要があるすべてのことのために、それにコンセントを設定する)か、完全にコードで設定する。現時点では、2つのコレクションビューがあると思います。
Xcode 6.2ストーリーボードを使用して作成しました。それが役に立てば幸い
#import <UIKit/UIKit.h>
@interface InfoSecurity : UIViewController
@property (strong, nonatomic) IBOutlet UICollectionView *tabsCV;
@end
.m
**************
#import "InfoSecurity.h"
#import "TabsCell.h"
@interface InfoSecurity ()<UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
@end
@implementation InfoSecurity
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.tabsCV registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"TabsCell"];
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return 03;
}
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 01;
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake(90, 50);
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
NSString *reuseIdentifier = @"tabscellID";
TabsCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
cell.TabTitleLabel.text= @"OPTIONS";
return cell;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
コレクションビューのセルが黒い場合があります(背景と同じ色、非表示、非表示は不可)。表示されているセルの再読み込みは回避策です。