2013-10-01 51 views
10

我有一個UICollectionView與補充視圖 - 實質上是一個頭集合。每當我使用界面生成器添加一個手勢識別的headerView.xib內一個UILabel,應用程序崩潰給我UICollectionView:添加單一的輕拍手勢識別器到補充視圖

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'invalid nib registered for identifier (MY_HEADER) - nib must contain exactly one top level object which must be a UICollectionReusableView instance' 

什麼在阻止我從一個UICollectionView的補充視圖中添加一個手勢識別到一個UILabel ?

+0

我提名重新開放的問題。從迄今收到的重新公開票來看,它應該很快重新開放。如果發生這種情況,請將您的解決方案作爲答案。這將有助於未來的讀者:) – Harry

+0

我也看到了同樣的問題。我可以通過以編程方式添加手勢識別器繼續前進,但我也想知道爲什麼使用Interface Builder不起作用。 –

回答

19

因此,您看起來像您不能使用界面生成器將手勢識別器添加到補充視圖的UICollectionView。

我相信這是因爲當加載.xib的時候,UICollectionView必須作爲一個東西出現在超級視圖中 - 當你將手勢識別器添加到該UICollectionView時,最終會在超級視圖級別得到兩件事情,都對應於UICollectionView。

但是,您可以使用UICollectionViewReusableView協議中補充視圖的定義以編程方式實現您的手勢識別器。 (該,如果正在使用的報頭補充視圖並且在該代碼的頁腳補充後視圖之間進行區分)

if (kind == UICollectionElementKindSectionHeader) { 
    MyHeaderView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"MY_HEADER" forIndexPath:indexPath]; 

    // call headerView methods (to put things into the header's UI objects for example) 
    [headerView ...]; 
    [headerView ...]; 
    [headerView ...]; 

    // add gesture recognition for tapping on a UIlabel within the header (UICollectionView supplementary view) 
    UITapGestureRecognizer *bioTap = [[UITapGestureRecognizer alloc] initWithTarget:headerView action:@selector(handleUILabelTap:)]; 
    // make your gesture recognizer priority 
    bioTap.delaysTouchesBegan = YES; 
    bioTap.numberOfTapsRequired = 1; 
    [headerView.UILabelName addGestureRecognizer:UILabelTap]; 

    reusableview = headerView; 
} 
0

如何在加載nib之後以編程方式添加它?或者在IB中,您是否試圖移動代表識別器上方或下方的圖標的位置

+0

它與手勢識別器有關。也就是說,使用IB將手勢識別器添加到.xib會導致此錯誤。 –

+0

如何在加載nib之後以編程方式添加它?或者,在IB中,您是否嘗試移動表示識別器上方或下方的代表視圖的圖標位置。 – pickwick

+0

就是這樣。感謝您的意見。 –

1

我也一直無法經由IB於手勢添加到細胞中。

但是,我的經驗是,使用IB,您可以通過將一個手勢識別器拖放到大綱視圖中的collectionView項目而不是位於圖形表示中collectionView頂部的scrollView中,將手勢識別器添加到collectionView本身。

到目前爲止,我只能通過一個單一的水龍頭進入collectionView。

相關問題