2013-06-20 14 views
8

Esiste la possibilità di modificare il colore di sfondo di UICollectionView solo mentre l'elemento viene toccato. Ho provato:UICollectionVisualizzazione dello sfondo delle celle mentre si tocca

-(void) collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath{ 
    //change color when tapped 
} 

-(void)collectionView:(UICollectionView *)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath{ 
    //change back on touch up 
} 

Ma il risultato è che riesco a vedere il cambiamento solo quando io continuo il mio dito per un tempo po 'più lungo. C'è qualche cosa simile come nel metodo UITableViewCellwillSelectItemAtIndexPath:?

risposta

28

Ma il risultato è che posso vedere il cambiamento solo quando io continuo il mio dito per un po 'di più di tempo

Il ritardo vostro stanno vivendo è probabilmente legato ai "tocchi di contenuti Delay" casella di controllo lo storyboard.

the checkbox in storyboard

Prova a deselezionare esso.

8

Penso che potresti voler mantenere la cella selezionata con un diverso colore di sfondo, giusto? Quindi prova questo codice.

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; 
    cell.backgroundColor = [UIColor magentaColor]; 
} 

- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; 
    cell.backgroundColor = [UIColor cyanColor]; 
} 

Basta semplicemente assegnare un colore BG diverso per le celle in stato diverso. Inoltre il codice seguente è la documentazione dei metodi di attivazione della sequenza mentre qualcuno tocca una cella collectionView. È inoltre possibile trovare questi documenti nel file UICollectionView.h, parte del protocollo UICollectionViewDelegate.

// Methods for notification of selection/deselection and highlight/unhighlight events. 
// The sequence of calls leading to selection from a user touch is: 
// 
// (when the touch begins) 
// 1. -collectionView:shouldHighlightItemAtIndexPath: 
// 2. -collectionView:didHighlightItemAtIndexPath: 
// 
// (when the touch lifts) 
// 3. -collectionView:shouldSelectItemAtIndexPath: or -collectionView:shouldDeselectItemAtIndexPath: 
// 4. -collectionView:didSelectItemAtIndexPath: or -collectionView:didDeselectItemAtIndexPath: 
// 5. -collectionView:didUnhighlightItemAtIndexPath: 

+0

ero alla ricerca di questa risposta ... stavo cambiando una griglia personalizzata per UICollectionView e TableView vista combinazione. L'implementazione di entrambi i metodi consente di selezionare e quindi modificare la selezione. Grazie Steve, questo è stato il trucco per me. –

3
// In Swift  
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    let cell = collectionView.cellForItemAtIndexPath(indexPath) as! UICollectionViewCell 
    cell.backgroundColor = UIColor.magentaColor() 
} 

func collectionView(collectionView: UICollectionView, didDeselectItemAtIndexPath indexPath: NSIndexPath) { 
    let cell = collectionView.cellForItemAtIndexPath(indexPath) as! UICollectionViewCell 
    cell.backgroundColor = UIColor.cyanColor() 
} 
+4

Questo metodo non funziona quando si scorre la vista raccolta. Anche le celle riutilizzate si colorano. –

+0

Dovrebbe usare 'didHighlightItemAtIndexPath' e' didUnhighlightItemAtIndexPath' come in [questa risposta] (http://stackoverflow.com/a/34503118/3681880) e la domanda sopra. – Suragch

Problemi correlati