2013-10-01 14 views
10

Ho un UICollectionView con una vista supplementare - in sostanza un'intestazione per la raccolta. Ogni volta che si aggiunge un sistema di riconoscimento gesto per un UILabel all'interno del headerView.xib utilizzando il costruttore di interfaccia, l'applicazione si blocca dandomiUICollectionView: aggiunta di un solo tocco Gesture Recognizer alla vista supplementare

*** 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' 

Quello che mi impedisce di aggiungere un sistema di riconoscimento gesto per un UILabel all'interno di una vista complementare di un UICollectionView ?

+0

Ho nominato la domanda per la riapertura. A giudicare dai voti riaperti ricevuti finora, dovrebbe riaprire presto. Se e quando ciò accade, si prega di inviare la soluzione come risposta. Aiuterebbe i futuri lettori :) – Harry

+0

Anche io vedo lo stesso problema. Posso andare avanti aggiungendo il riconoscimento dei gesti a livello di codice, ma mi chiedo anche perché l'uso di Interface Builder non funzioni. –

risposta

19

Quindi sembra che tu non sia possibile utilizzare il generatore di interfaccia per aggiungere un riconoscimento di gesture a una vista supplementare di un UICollectionView.

Credo che questo sia dovuto al fatto che quando vengono caricati i file .xib, UICollectionView deve apparire come una cosa sola al superview e quando si aggiunge il riconoscitore di gesti a tale UICollectionView si finisce con due cose a livello di superview, che entrambi corrispondono a UICollectionView.

È comunque possibile implementare il riconoscimento di gesti in modo programmatico utilizzando la definizione della vista supplementare all'interno del protocollo UICollectionViewReusableView. (Il se viene utilizzato per distinguere tra una vista complementare intestazione e una vista complementare piè avanti nel codice)

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

Cosa ne pensi di aggiungerlo a livello di codice dopo aver caricato il pennino? in alternativa, in IB hai provato a spostare la posizione dell'icona che rappresenta il riconoscimento sopra o sotto quello che rappresenta la vista

+0

È correlato al riconoscitore di gesti. Cioè, l'aggiunta del rilevatore di gesti al file .xib usando IB causa questo errore. –

+0

che ne dici di aggiungerlo a livello di codice dopo aver caricato il pennino? in alternativa, in IB hai provato a spostare la posizione dell'icona che rappresenta il riconoscimento sopra o sotto quello che rappresenta la vista. – pickwick

+0

Questo è esattamente. Grazie per l'input. –

1

anche io non sono stati in grado di aggiungere un gesto a una cella tramite IB.

Tuttavia, la mia esperienza è stata che utilizzando IB è possibile aggiungere un gesture recognition alla collectionView stessa trascinandone uno alla voce collectionView nella vista struttura NOT alla scrollView che si trova in cima alla collectionView nella rappresentazione grafica.

Finora riesco a ottenere un solo tocco attraverso la cella e nella collectionView.

Problemi correlati