我有幾個SKScenes的應用程序。爲了保持活潑,我有一個單獨的UIViewController,可以處理1個SKView。在SKScene上使用UICollectionView
我想添加一個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不兼容的類型。
所以我的問題是,如何最好地解決這個問題?
你的self.view.scene錯誤是因爲它只知道它是一個SKScene,而不是你特定的場景子類。我的猜測是,通過將你的子視圖添加到didMoveToView中的視圖,它永遠不會被告知加載數據,因爲viewDidLoad/WillAppear/DidLoad已被調用。嘗試在某處調用[_collectionView reloadData]並查看是否填充它。 – Devin
您是否嘗試初始化didMoveToView中的集合視圖? – LearnCocos2D