ОБНОВЛЕНИЕ: Решенная проблема, см. Ниже!
Ситуация: у меня есть несколько динамически загруженных UIViews для UIScrollView в наконечнике.
Ожидаемое поведение: я хочу выделить TAP для любого из UIViews, и он изменит цвет фона, чтобы указать, что он был нажат.Если он уже был нажат, он должен вернуться к первоначальному виду.
Я установил распознаватель UITapGesture на каждом из UIViews, и вот метод селектора, где я делаю поведение.Я запутался.Я прошу прощения за схематичную логику здесь (это грубый набросок).Я установил isTapped BOOL, изначально установленный на «NO» в файле init.
- (void)handleSingleTap:(UIGestureRecognizer *)gestureRecognizer {
isTapped = !isTapped;
UIView *v = gestureRecognizer.view;
NSInteger currentIndex = [studentCellArray indexOfObjectIdenticalTo:v];
if (oldIndex != currentIndex) {
isTapped = YES;
}
//check to see if obj in array then switch on/off
if ([tappedViewArray indexOfObjectIdenticalTo:v] != NSNotFound) {
oldIndex = currentIndex;
}
if (currentIndex == v.tag) {
isTapped = !isTapped;
}
if (isTapped) {
[tappedViewArray addObject:v];
[super formatViewTouchedNiceGrey:v];
}else{
[tappedViewArray removeObject:v];
[super formatViewBorder:v];
}
if (currentIndex == oldIndex) {
isTapped = !isTapped;
}
}
Actual Behavior: после нажатия на первый UIView он выбирает штраф и изменяется,второе нажатие вернет его обратно, однако после последовательных нажатий оно останется выбранным.Кроме того, если вы выбираете UIView и переходите к другому представлению - вы должны дважды нажать последовательные представления.
Я хотел бы просто нажать один раз, чтобы выключить или включить любой из UIViews в просмотре прокрутки.
ОБНОВЛЕНИЕ: Ну, после некоторых почерков и других тщетных попыток попытаться сосредоточиться на этой проблеме ---- Я решил это таким образом, и он ведет себя правильно!
вот мое решение:
- (void)handleSingleTap:(UIGestureRecognizer *)gestureRecognizer {
isTapped = !isTapped;
UIView *v = gestureRecognizer.view;
NSInteger currentIndex = [studentCellArray indexOfObjectIdenticalTo:v];
if (((isTapped && currentIndex != oldIndex) || (!isTapped && currentIndex != oldIndex)) && [tappedViewArray indexOfObject:v] == NSNotFound) {
oldIndex = currentIndex;
[tappedViewArray addObject:v];
[super formatCornerRadiusWithGreyBackgrnd:v];
} else {
[super formatViewBorder:v];
[tappedViewArray removeObject:v];
}
}
Поэтому я надеюсь, что это поможет кому-то решить эту проблему.
Ключ должен был проверить, что isTapped и индексы не равны И объект представления НЕ находится в массиве, который я собирал, чтобы указать элементы, к которым прикоснулись / Tapped ....