Как отменить последовательность событий UITouch?

Это называется SSO (Единый вход в систему).

Вы можете использовать oAuth2 для этого. Возможный сценарий может быть таким:

enter image description here

или вы можете создать свою собственную, следуя стратегии, приведенной на диаграмме, но oAuth2 дает вам почти все под капотом.

20
задан ma11hew28 25 November 2011 в 16:35
поделиться

3 ответа

Это решение может быть немного топорным, но Вы могли реализовать и вручную звонить

- (void) touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

, я основываю это решение свободно на некоторой тонкой настройке, которую я сделал к демонстрационному приложению MoveMe на сайте примера кода iPhone Apple , где я изменил touchesMoved метод для сходства с этим:

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
     UITouch *touch = [touches anyObject];
     if ([touch view] == placardView)
         CGPoint location = [touch locationInView:self];
         placardView.center = location;
         // I added the following line:
         [self touchesCancelled:touches withEvent:event];
         return;
}
6
ответ дан 30 November 2019 в 01:20
поделиться

Недавно я столкнулся с той же проблемой и нашел стандартный способ ее решения. Вы можете использовать [[UIApplication sharedApplication] beginIgnoringInteractionEvents] чтобы перестать доставлять события touchesMoved ко всему приложению. Не забудьте включить их, используя [[UIApplication sharedApplication] endIgnoringInteractionEvents], когда вам снова нужно получать касания.

2
ответ дан 30 November 2019 в 01:20
поделиться

Вам нужно вызвать [super touchMoved: withEvent:] , чтобы позволить супервизору очистить событие, но, что более важно, вам нужно , а не вызвать [super touchCancelled: withEvent:] .

Вот что я использовал для ячейки, чтобы она не выделялась при обнаружении смахивания:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    if (!showingEdit) {
        if (IS_FAR_ENOUGH_TO_BE_A_SWIPE) {
            RESPOND_TO_SWIPE
            showingEdit = YES;
            [super touchesCancelled:touches withEvent:event];
        } else {
            [super touchesMoved:touches withEvent:event];
        }
    }
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    if (!showingEdit) {
        [super touchesEnded:touches withEvent:event];
    }
}
3
ответ дан 30 November 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: