Изменение динамических подвидов UIView с одним нажатием в методе UIGestureRecognizer - PullRequest
1 голос
/ 11 января 2012

ОБНОВЛЕНИЕ: Решенная проблема, см. Ниже!

Ситуация: у меня есть несколько динамически загруженных 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 ....

...