我正在尝试创建一个简单的视图:一个占用80%屏幕的tableView,以及一个底部有4行的collectionView。我的tableView一切正常,但我无法用我的collectionView搞定。我总是得到以下例外:
Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: 'could not dequeue a view of kind: UICollectionElementKindCell with
identifier simpleCollectionCell - must register a nib or a class for the
identifier or connect a prototype cell in a storyboard'.
我一直在查看我的View Controller:我的collectionVIew有两个引用出口:datasource和delegate。所以没关系。我正在使用方法“withReuseIdentifier”,所以我不必在nib中声明一个标识符。我一直在尝试为collectionView创建一个属性,但它什么都没改变。
所以我真的不明白我错过了什么......
.h:
#import <UIKit/UIKit.h>
@interface MainViewController : UIViewController <UITableViewDelegate,
UITableViewDataSource, UICollectionViewDelegate, UICollectionViewDataSource>
@end
.m:
#import "MainViewController.h"
@interface MainViewController ()
@end
@implementation MainViewController {
NSArray *recipes;
NSArray *images; }
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self; }
- (void)viewDidLoad {
[super viewDidLoad];
recipes = [NSArray arrayWithObjects:@"Label1", @"Label2", @"Label3", @"Label4", @"Label5", @"Label6", @"Label7", @"Label8", @"Label9", @"Label10", @"Label11", @"Label12", @"Label13", @"Label14", @"Label15", nil];
images = [NSArray arrayWithObjects:@"img1", @"img2", @"img3", @"img4", nil];
// Do any additional setup after loading the view. }
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated. }
#pragma mark TableView methods
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [recipes count]; }
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"SimpleTableCell";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:simpleTableIdentifier];
}
cell.textLabel.text = [recipes objectAtIndex:indexPath.row];
return cell;
}
#pragma mark CollectionView methods
- (NSInteger) numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 1;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView
numberOfItemsInSection: (NSInteger)section {
return [images count];
}
- (UICollectionViewCell *) collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [collectionView
dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
return cell;
}
@end
提前致谢!
答案 0 :(得分:1)
确保在“界面”构建器中设置了正确的自定义类(如果有)以及“集合视图单元”的“单元标识符”。检查此屏幕截图。
这适用于自定义类,下面的是单元格标识符。
您的案例中的标识符是“单元格”。确保你有这些设置。他们可能是这里的问题。您的CollectionViewCell的类名称和cellForItemAtIndexPath
中的类名称应该相同。
希望这有帮助。
答案 1 :(得分:1)
Oky你可以试试这个,只是一个简单的方法,
user interface
选择view
中创建一个新文件,并将其命名为NibCell
。CollectionViewCell
即可......:)例如
viewDidLoad
方法中的
- (void)viewDidLoad
{
[super viewDidLoad];
//....other code
//nib register
UINib *cellNib = [UINib nibWithNibName:@"NibCell" bundle:nil];
[_collectionView registerNib:cellNib forCellWithReuseIdentifier:@"Cell"];
}
并在此方法中
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"Cell"; //u know the identifier
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath]; //get the cell
UILabel *titleLabel = (UILabel *)[cell viewWithTag:100]; //for example i put a label and set it's tag to 100 and i an accessing it
[titleLabel setText:cellData];
return cell;
}
答案 2 :(得分:1)
您必须注册您的集合视图单元格
[self.dashBoardCollection registerNib:[UINib nibWithNibName:@“DashBoardCell”bundle:nil] forCellWithReuseIdentifier:@“DashBoardCell”];
可能在身份检查器中缺少您的类