Просто поместите прозрачный UIView поверх всего экрана и сделайте так, чтобы он перехватывал все сенсорные события.
Чтобы перехватить события касания, просто создайте подкласс UIView и переопределите
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;
Обычно внутри этого метода вы вызываете super, но в этом случае вы просто возвращаете YES:
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
return YES;
}
Если вы хотите быть по-настоящему модным, вы можете добавить синтезированное свойство к подклассу UIView с именем shouldInterceptTouches и сделать что-то вроде этого:
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
return shouldInterceptTouches ? YES : [super pointInside:point withEvent:event];
}
Также не забудьте убедиться, что ваш прозрачный вид выше других видов.
Примечание: руководству Apple по человеческому интерфейсу не нравится, когда вы делаете подобные вещи. Пользователь будет сбит с толку и разочарован, если ваше приложение не отвечает, и это может привести к его выходу из приложения, если они думают, что оно заморожено. Вам лучше отображать какой-то вид UIActivityIndicatorView и отключать только абсолютно необходимые кнопки. Apple нравится, когда вы делаете такие вещи в фоновом режиме и позволяете пользователю делать другие вещи, на случай, если это займет некоторое время или не удастся.