2013-02-14 6 views
10

Sto utilizzando un UICollectionView per visualizzare un menu e gli elementi vengono selezionati in un modo MOLTO strano.Strange UICollectionComposizio selezione selezione

Ecco il mio dati statici che li popola:

self.menuItems = @[@{@"text" : @"First", @"image" : @"180-stickynote.png"}, 
        @{@"text" : @"Second", @"image" : @"180-stickynote.png"}, 
        @{@"text" : @"Third", @"image" : @"180-stickynote.png"}, 
        @{@"text" : @"Fourth", @"image" : @"180-stickynote.png"}, 
        @{@"text" : @"Fifth", @"image" : @"180-stickynote.png"}, 
        @{@"text" : @"Sixth", @"image" : @"180-stickynote.png"}]; 

E il gestore di telefonia mobile, in cui la sottoclasse personalizzata è solo attaccato al prototipo di cella e ha un UILabel e un UIImageView:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 

    CUMenuCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MenuCell" forIndexPath:indexPath]; 

    NSDictionary *cellInfo = [self.menuItems objectAtIndex:indexPath.row]; 

    cell.imageView.image = [UIImage imageNamed:[cellInfo valueForKey:@"image"]]; 

    cell.label.text = [cellInfo valueForKey:@"text"]; 

    return cell; 
} 

Ecco il metodo selezionato per selezionare la riga, registrare il titolo e la riga dell'articolo (sono tutti nella sezione 0):

- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"%@: %d", [[self.menuItems objectAtIndex:indexPath.row] valueForKey:@"text"], indexPath.row); 
} 

Infine, lo screenshot del mio menù:

enter image description here

Ecco il registro quando seleziono le voci dal primo al sesto, poi di nuovo dal sesto al primo (primo, secondo, terzo, quarto, quinto, sesto, sesto, quinto, quarto, terzo, secondo, primo) (12 rubinetti totali, si noti che il primo rubinetto non ha nemmeno registrati, né alla seconda battuta Sesto):

------------------------------------- FIRST TAP ON FIRST HERE 
2013-02-13 19:38:37.343 App[1383:c07] First: 0 // second tap, on Second 
2013-02-13 19:38:38.095 App[1383:c07] Second: 1 // third tap, on Third 
2013-02-13 19:38:38.678 App[1383:c07] Third: 2 // fourth tap, on Fourth 
2013-02-13 19:38:39.375 App[1383:c07] Fourth: 3 // fifth tap, on Fifth 
2013-02-13 19:38:40.167 App[1383:c07] Fifth: 4 // so on 
2013-02-13 19:38:41.751 App[1383:c07] Sixth: 5 
------------------------------------- SECOND TAP ON SIXTH HERE 
2013-02-13 19:38:42.654 App[1383:c07] Fifth: 4 
2013-02-13 19:38:43.318 App[1383:c07] Fourth: 3 
2013-02-13 19:38:44.495 App[1383:c07] Third: 2 
2013-02-13 19:38:45.071 App[1383:c07] Second: 1 

risposta

52

Questo perché utilizzano il metodo didDeselectItemAtIndexPath: anziché didSelectItemAtIndexPath:. Un errore facile da fare, soprattutto se stai utilizzando il completamento del codice quando lo digiti.

+1

Wow. Potrei urlare un po ', troppo tardi adesso. Grazie mille, sinceramente! – Josh

+0

@Josh, nessun problema, è un errore che ho fatto più di una volta. – rdelmar

+0

Wow. Ha fatto anche questo errore. Pensavo ci fosse un po 'di magia nera al lavoro. Ma no. Sono stato ingannato grande tempo :) – villapossu