我有一个带有几个Skscenes的应用程序。为了让它保持活力,我有一个uiviewController,可以处理1个SkView。
我正在尝试将UicollectionView添加到其中一个Skscenes。但是,当我尝试将收集视图的代表设置为SKSCENE初始化时,问题就出现了。
我在这里初始化:
- (id)initWithSize:(CGSize)size
{
if (self = [super initWithSize:size]) {
//Initialise collectionView
UICollectionViewLayout *layout = [[UICollectionViewLayout alloc] init];
_collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height) collectionViewLayout:layout];
_collectionView.delegate = self;
_collectionView.dataSource = self;
[_collectionView setBackgroundColor:[UIColor redColor]];
}
return self;
}
初始化后,我通过致电:
将收集视图添加为UiviewController视图的子视图- (void)didMoveToView:(SKView *)view
{
[self.view addSubview:_collectionView];
}
但是未调用委托或数据源方法。我已经设置了标题:
@interface BrowseScene : SKScene <UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
我猜想,尽管将自我设置为代表,但一旦添加了集合视图,它就会添加为UiviewController的SkView的子视图,因此没有引用初始化它的Skscene。我尝试致电:
_collectionView.delegate = self.view.scene;
但是我收到一个编译器错误,说SkScene是UicollectionViewDelegate的一种不兼容的类型。
所以我的问题是,如何最好地处理?
事实证明,问题在于我如何初始化uicollectionView而不是在哪里。将Skscene设置为代表课是完全可以的。
未称呼代表的主要原因是因为我用一个空布局对象初始化了收集视图(因为uicollectionviewlayout只是一个抽象类)。我改用标准的UicollectionViewFlowLayout初始化,然后在类初始化时调用方法。
我也错过了
的电话[_collectionView registerClass:[collectionViewCell class] forCellWithReuseIdentifier:@"collectionViewCell"];
(在完整的代码中,我打电话给ReloDdata,所以这里不是问题所在)。