21

タイトルが示すように、スルー IBUICollectionViewに接続された があります。UIViewControllerというUICollectionViewサブクラスがありimageCellます。viewcontrollerviewDidLoadメソッドでは、次のようにクラスを登録します。

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次に、サービスから写真を取得する in viewDidAppear(UI 上の理由から)と呼ばれるメソッドを呼び出し、次に[imagCcollectionView reloadData];insideを呼び出しますgetPhotos

次に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。どんな助けでも大歓迎です。

注: クラスを作成したときに XIB を作成せず、imageCellストーリーボードを使用しています。

4

8 に答える 8

45

ストーリーボードでセルを作成した場合は、register class ステートメントを削除するだけです。ストーリーボードにセルを作成する場合は、(コレクション ビューまたはテーブル ビューの場合) 何も登録する必要はありません (実際、登録すると問題が発生します)。必要な唯一のことは、IB で識別子を設定していることを確認することです。

于 2013-04-18T04:32:46.027 に答える
20

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)

于 2016-01-11T14:04:38.920 に答える
1

間違いは、Nib/Xib ファイルを登録する方法です (Swift 5 を使用):

この登録方法を使用します。

myCollectionView.register(UINib(nibName: "myCustomCell", bundle: nil), forCellWithReuseIdentifier: "myCustomCell")

これの代わりに:

myCollectionView.register(myCustomCell.self, forCellWithReuseIdentifier: "myCustomCell")
于 2020-12-07T06:58:08.390 に答える
0

コードで新しいコレクション ビューをインスタンス化していますが、ビューを画面に追加していません。既にストーリーボードを使用しているとおっしゃいましたが、おそらくデータソースやデリゲートに接続されていない、ストーリーボードからのコレクション ビューが表示されるのではないでしょうか? それか、正しいコレクションビューでリロードを呼び出していません。

ストーリーボードでコレクション ビューを構成する (そして、コードで実行する必要があるもののためにアウトレットをセットアップする) か、完全にコードでセットアップします。現時点では、2 つのコレクション ビューがあると思います。

于 2013-04-19T06:32:20.287 に答える
0

コレクション ビューのセルが黒の場合があります (背景と同じ色、非表示、非表示はありません)。表示されているセルをリロードすると回避できます。

于 2016-12-16T23:10:10.533 に答える
0

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.
}
于 2015-07-28T12:48:36.360 に答える