Отключить все входные данные во время вращения UIActivityIndicatorView - PullRequest
24 голосов
/ 04 марта 2012

Как я могу отключить все входные данные во время вращения UIActivityIndicatorView?

Спасибо

Ответы [ 3 ]

52 голосов
/ 04 марта 2012

Вы можете позвонить beginIgnoringInteractionEvents при запуске счетчика

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];

и endIgnoringInteractionEvents при его остановке.

[[UIApplication sharedApplication] endIgnoringInteractionEvents];

Просто убедитесь, что ваш код всегда доходит до того, что вы звоните endIgnoringInteractionEvents, иначе ваше приложение зависнет (с точки зрения пользователя).

6 голосов
/ 31 января 2017

В Swift 3.0:

Чтобы отключить взаимодействие:

UIApplication.shared.beginIgnoringInteractionEvents() 

Для восстановления взаимодействия:

UIApplication.shared.endIgnoringInteractionEvents() 
1 голос
/ 02 апреля 2014

Просто дополнение к ответу rokjarc. Вот пример сторожевого пса, чтобы поддержать приложение. Вы можете звонить всегда с некоторым критическим интервалом, возможно, 10 сек. А если вам нужно включить в течение 10 секунд, просто вызовите метод «enable».

UIWindow * __weak mainWindow;

- (void)disableGlobalUserInteractionForTimeInterval:(NSTimeInterval)interval
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        mainWindow = [[[UIApplication sharedApplication] windows] lastObject];
    });

    [mainWindow setUserInteractionEnabled:false];

    if (interval > 0)
    {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(interval * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [self enableGlobalUserInteraction];
        });
    }
}

- (void)enableGlobalUserInteraction
{
    if (mainWindow)
    {
        [mainWindow setUserInteractionEnabled:true];
    }
}
...