2013-05-03 17 views
6

Mam UICollectionView, gdzie każdy UICollectionViewCell ma UIButton jako wyekspozycji. UButtony odpowiadają na stuknięcia bez problemu (ich cele zostają wystrzelone), ale sam przycisk nie zmienia się w wybrany stan (brak zmiany wyglądu i stylu przycisku). Mam przeczucie, że to dlatego, że UICollectionViewCell nie przekazuje poprawnie swoich zdarzeń dotykowych do przycisku, ale nie jestem pewien. Nawet jeśli tak, to jak skonfigurować ustawienia, aby stan przycisku zmieniał się prawidłowo w tym scenariuszu?Wywołanie UIButton w UICollectionViewCell nie zmienia stanu sterowania

Odpowiedz

12

UIScrollview (a więc UICollectionView też) ma właściwość o nazwie delaysContentTouches domyślnie jest ustawiony na TAK, zmienić na NO a przycisk należy podkreślić jak to ma.

+0

Piękne! Działa doskonale.Dla ciekawskich, oto odpowiednia dokumentacja tej właściwości: 'Wartość logiczna, która określa, czy widok przewijania opóźnia obsługę gestów touch-down. Jeśli wartość tej właściwości wynosi TAK, widok przewijania opóźnia obsługę gestu touch-down aż do ustalenia, czy przewijanie jest zamierzone. Jeśli wartością jest NIE, widok przewijania natychmiast wywołuje dotknięciaShouldBegin: withEvent: inContentView :. Domyślna wartość to TAK –

0

Jeśli mogę zasugerować alternatywa, UICollectionView ma niesamowite metody delegata nazwie

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

który mógłby obsłużyć kliknij aby tej celi ... jeśli szukasz konkretnych wydarzeń powracają jak widząc obraz zmienić na stan przycisku, możesz napisać, że w ... po naciśnięciu przycisku wykonaj jedną czynność, po zwolnieniu przycisku wykonaj inną rzecz ...

zgodnie z dokumentacją również

UIControlStateSe wybrany Wybrany stan kontroli. W przypadku wielu elementów sterujących ten stan nie ma wpływu na zachowanie ani wygląd. Ale inne podklasy (na przykład klasa UISegmentedControl) mogą mieć różny wygląd w zależności od wybranego stanu. Możesz pobrać i ustawić tę wartość za pośrednictwem wybranej właściwości.

w laymens chodzi .. na UIButton „Wybrane państwa” nic nie robi ...

jeśli przycisk jest przypuszczać, aby przyciemnić, kiedy to kliknął i nie robi tego, to może trzeba to zrobić jeśli programowo, ale nie jestem do końca pewien, co chce zrobić ...

funkcja ściemniania jest ze w zaznaczonym stanie

UIControlStateHighlighted Podkreślił stan kontroli. Element sterujący wchodzi w ten stan, gdy dotknięcie wchodzi i kończy się podczas śledzenia i gdy występuje zdarzenie dotyku. Możesz pobrać i ustawić tę wartość za pomocą podświetlonej właściwości.

w laymens warunkach, dotknąć przycisk to podświetlone

aby sprawdzić, czy przycisk zmienia stany właściwie można zrobić coś takiego

[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); 

„functionToCall zostanie wywołana gdy każdy rodzaj dotknięcie przycisku dzieje się nawet z przyciskiem, aw tej funkcji można mieć te 3 dzienniki NSLog, które będą drukować na konsoli różne wartości UIControlState, to pokaże, że przycisk działa poprawnie i pokazuje, że może to być błąd UIViewCollection, jeśli jest to UICollectionView ... wtedy będziesz musiał programowo przyciemnić przycisk: 3

mam nadzieję, że to pomoże!

+0

Próbowałem ustawić programowo przycisk podświetlony, ale nadal nie działa. –

Powiązane problemy