任何人都可以告诉我,如何从nib中的表视图单元格中使用集合视图。我有表视图,自定义tableview单元格,集合视图,自定义集合视图单元格。在tableview的内部委托方法中,我添加了
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellId = @"cell";
CreateStoryTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CreateStoryTableViewCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
[cell.collectionviwStory registerNib:[UINib nibWithNibName:@"StoryPicsCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"StoryPicsCollectionViewCell"];
cell.collectionviwStory.dataSource=self;
cell.collectionviwStory.delegate=self;
// Configure layout
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
[flowLayout setItemSize:CGSizeMake(100.0, 100.0)];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
[self setAutomaticallyAdjustsScrollViewInsets:NO];
[cell.collectionviwStory setCollectionViewLayout:flowLayout];
return cell;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
static NSString *identifier = @"StoryPicsCollectionViewCell";
static BOOL nibMyCellloaded = NO;
if(!nibMyCellloaded)
{
UINib *nib = [UINib nibWithNibName:@"StoryPicsCollectionViewCell" bundle: nil];
[collectionView registerNib:nib forCellWithReuseIdentifier:identifier];
nibMyCellloaded = YES;
}
StoryPicsCollectionViewCell *cell = (StoryPicsCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
cell.backgroundColor = [UIColor greenColor];
return cell;
}
在我的自定义表格单元格
中- (void)awakeFromNib {
// Initialization code
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.sectionInset = UIEdgeInsetsMake(10, 10, 9, 10);
layout.itemSize = CGSizeMake(44, 44);
layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
[self.collectionviwStory registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:CollectionViewCellIdentifier];
self.collectionviwStory.backgroundColor = [UIColor greenColor];
self.collectionviwStory.showsHorizontalScrollIndicator = NO;
[self.contentView addSubview:self.collectionviwStory];
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
-(void)layoutSubviews
{
[super layoutSubviews];
self.collectionviwStory.frame = self.contentView.bounds;
}
- (void)setCollectionViewDataSourceDelegate:(id<UICollectionViewDataSource, UICollectionViewDelegate>)dataSourceDelegate indexPath:(NSIndexPath *)indexPath
{
self.collectionviwStory.dataSource = dataSourceDelegate;
self.collectionviwStory.delegate = dataSourceDelegate;
[self.collectionviwStory reloadData];
}
我的代码崩溃了
StoryPicsCollectionViewCell *cell = (StoryPicsCollectionViewCell *)
[
collectionView dequeueReusableCellWithReuseIdentifier:identifier
forIndexPath:indexPath
];
崩溃日志
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'could not dequeue a view of kind: UICollectionElementKindCell with identifier StoryPicsCollectionViewCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'
*** First throw call stack:
(
0 CoreFoundation 0x01ba6746 __exceptionPreprocess + 182
1 libobjc.A.dylib 0x0182fa97 objc_exception_throw + 44
2 CoreFoundation 0x01ba65da +[NSException raise:format:arguments:] + 138
3 Foundation 0x0149c720 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 118
4 UIKit 0x02a16f7b -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:] + 1358
5 UIKit 0x02a172dc -[UICollectionView dequeueReusableCellWithReuseIdentifier:forIndexPath:] + 160
6 wedcraze 0x00116f3f -[DashboardViewController collectionView:cellForItemAtIndexPath:] + 127
7 UIKit 0x02a07d5a -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:] + 258
8 UIKit 0x02a09e96 -[UICollectionView _updateVisibleCellsNow:] + 4947
9 UIKit 0x02a0e6e1 -[UICollectionView layoutSubviews] + 281
10 UIKit 0x0238d57a -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 668
11 libobjc.A.dylib 0x01845771 -[NSObject performSelector:withObject:] + 70
12 QuartzCore 0x021b8e47 -[CALayer layoutSublayers] + 144
13 QuartzCore 0x021ac925 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 403
14 QuartzCore 0x021ac77a _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 26
15 QuartzCore 0x02108c52 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 284
16 QuartzCore 0x0210a0e5 _ZN2CA11Transaction6commitEv + 487
17 QuartzCore 0x0210a7fc _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 92
18 CoreFoundation 0x01ac786e __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 30
19 CoreFoundation 0x01ac77b0 __CFRunLoopDoObservers + 400
20 CoreFoundation 0x01abd1ea __CFRunLoopRun + 1226
21 CoreFoundation 0x01abca5b CFRunLoopRunSpecific + 443
22 CoreFoundation 0x01abc88b CFRunLoopRunInMode + 123
23 GraphicsServices 0x046322c9 GSEventRunModal + 192
24 GraphicsServices 0x04632106 GSEventRun + 104
25 UIKit 0x022fa106 UIApplicationMain + 1526
26 wedcraze 0x000f348a main + 138
27 libdyld.dylib 0x07f60ac9 start + 1
28 ??? 0x00000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
任何人都能帮助我吗?或者为此建议一些教程
答案 0 :(得分:0)
您需要将此代码放在自定义表格单元格的awakeFromNib中
UINib *nib = [[UINib nibWithNibName:@"StoryPicsCollectionViewCell" bundle:[NSBundle mainBundle]];
[self.collectionviwStory registerNib:nib forCellWithReuseIdentifier:@"StoryPicsCollectionViewCell"];
现在,在你有机会注册你的笔尖之前,你的deque调用已经发生了。希望这会有所帮助。