Это называется SSO (Единый вход в систему).
Вы можете использовать oAuth2 для этого. Возможный сценарий может быть таким:
или вы можете создать свою собственную, следуя стратегии, приведенной на диаграмме, но oAuth2 дает вам почти все под капотом.
Это решение может быть немного топорным, но Вы могли реализовать и вручную звонить
- (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;
}
Недавно я столкнулся с той же проблемой и нашел стандартный способ ее решения. Вы можете использовать [[UIApplication sharedApplication] beginIgnoringInteractionEvents] чтобы перестать доставлять события touchesMoved ко всему приложению. Не забудьте включить их, используя [[UIApplication sharedApplication] endIgnoringInteractionEvents], когда вам снова нужно получать касания.
Вам нужно вызвать [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];
}
}