2013-05-03 6 views
6

Ho un UICollectionView in cui ogni UICollectionViewCell ha un UIButton come sottoview. Gli UIButtons rispondono per non toccare nessun problema (i loro bersagli vengono sparati), ma il pulsante stesso non cambia allo stato selezionato (nessun cambiamento nell'aspetto del pulsante). Ho l'intuizione perché UICollectionViewCell non inoltra correttamente i suoi eventi touch al pulsante, ma non ne sono sicuro. Anche se è così, come posso impostare le cose in modo che lo stato del pulsante cambi correttamente in questo scenario?Sottomenu UIButton in UICollectionViewCell che non modifica lo stato di controllo

risposta

12

Il UIScrollview (e quindi UICollectionView troppo) ha una proprietà chiamata delaysContentTouches, per impostazione predefinita è impostata su YES , cambiare questo a NO e il pulsante deve evidenziare come si suppone.

+0

Bello! Ha funzionato perfettamentePer i curiosi, ecco la documentazione pertinente su quella proprietà: 'Un valore booleano che determina se la vista di scorrimento ritarda la gestione dei gesti di ritocco. Se il valore di questa proprietà è SÌ, i ritardi della vista di scorrimento gestiscono il gesto di tocco finché non è in grado di determinare se lo scorrimento è l'intento. Se il valore è NO, la vista di scorrimento chiama immediatamente touchShouldBegin: withEvent: inContentView :. Il valore predefinito è SÌ –

0

Se posso suggerire un'alternativa, l'UICollectionView ha un metodo delegato impressionante chiamato

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { } 

che potrebbe gestire il clic a quella cella ... se siete alla ricerca di eventi specifici accadano come vedere un'immagine passare allo stato del pulsante, è possibile codificare duro che in ... quando si preme il pulsante di fare una cosa, quando si rilascia il pulsante di fare un'altra cosa ....

secondo la documentazione, nonché

UIControlStateSe lected Stato selezionato di un controllo. Per molti controlli, questo stato non ha alcun effetto sul comportamento o sull'aspetto. Ma altre sottoclassi (ad esempio, la classe UISegmentedControl) potrebbero avere un aspetto diverso a seconda del loro stato selezionato. È possibile recuperare e impostare questo valore attraverso la proprietà selezionata.

in termini laymens .. per un UIButton lo "Stato Selected" non fa nulla ...

se il pulsante è supponiamo di dim quando viene cliccato e non sta facendo questo, allora si può avere a che fare a livello di codice se, ma io non sono esattamente sicuro di quello che si sta cercando di fare ...

la funzione di oscuramento è con in stato evidenziato

UIControlStateHighlighted stato evidenziato di un controllo. Un controllo entra in questo stato quando un tocco entra ed esce durante il tracciamento e quando c'è un evento di ritocco. È possibile recuperare e impostare questo valore attraverso la proprietà evidenziata.

in termini laymens, si tocca il pulsante è evidenziato

per vedere se il pulsante sta cambiando stati correttamente si può fare qualcosa di simile

[button addTarget:self action:@selector(functionToCall:) forControlEvents:UIControlEventAllTouchEvents]; 

NSLog(@"Selected: %i", button.selected); 
NSLog(@"Highlighted: %i", button.highlighted); 
NSLog(@"Normal State or not: %i", button.state); 

il "functionToCall verrà chiamato quando qualsiasi tipo di tocco accade anche al pulsante e con quella funzione potresti avere quei 3 NSLogs che stamperanno sulla tua console i diversi valori di UIControlState, questo mostrerà che il pulsante funziona correttamente e mostra che potrebbe essere un errore UIViewCollection, se è il UICollectionView ... quindi si dovrà abbassare il pulsante a livello di codice: 3

spero che questo aiuti!

+0

Ho provato a impostare il pulsante in modo programmatico sullo stato evidenziato, ma ancora non ha funzionato. –