我有一个带有几个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>
我猜测尽管将self设置为委托,但是一旦添加了集合视图,它就会被添加为UIViewController的SKView的子视图,因此没有引用初始化它的SKScene。我试着打电话:
_collectionView.delegate = self.view.scene;
但是我收到编译错误,说SKScene是UICollectionViewDelegate的不兼容类型。
所以我的问题是,如何最好地接近这个?
答案 0 :(得分:2)
事实证明,问题在于我如何初始化UICollectionView,而不是在哪里。将SKScene设置为委托类是完全可以的。
代理没有被调用的主要原因是因为我用一个空的布局对象初始化了collectionView(因为UICollectionViewLayout只是一个抽象类)。我用标准的UICollectionViewFlowLayout初始化,然后在初始化类时调用这些方法。
我也错过了对
的电话[_collectionView registerClass:[collectionViewCell class] forCellWithReuseIdentifier:@"collectionViewCell"];
(在完整的代码中,我调用了reloadData,所以这不是问题)。