작업을 기다리는 동안 사용자 입력 무시 - Objective -C
-
08-07-2019 - |
문제
'변환'버튼이있는 앱이 있습니다. 이 버튼을 클릭하면 앱은 Nstask를 사용하여 새로운 프로세스를 시작한 다음 프로세스가 완료 될 때까지 버튼을 다시 시작합니다.
내 문제는 앱이 프로세스가 완료되기를 기다리는 동안 사용자의 클릭을 저장한다는 것입니다. 따라서 버튼이 회색으로 나오더라도 사용자는 클릭 할 수 있으며 프로세스가 끝나 자마자 즉시 다시 시작됩니다.
프로세스가 사용을 완료하기를 기다리고 있습니다.
[task waitUntilExit];
이 작업이 완료되기를 기다리는 동안 사용자 입력을 어떻게 무시합니까?
해결책
-[NSTask waitUntilExit]
물론 차단 호출입니다. 즉, 스레드가 일시 중지 된 것을 의미하며 (실행 루프와 마찬가지로) 스레드로 전송되는 모든 이벤트는 런 루프가 처리 할 수있을 때까지 대기됩니다.
대신에 waitUntilExit
, 나는 다음과 같은 일을 할 것입니다.
- (IBAction) myButtonMethod {
NSTask * task = ....;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskFinished:) name:NSTaskDidTerminateNotification object:task];
[myButton setEnabled:NO];
[task launch];
}
- (void) taskFinished:(NSNotification *)note {
[myButton setEnabled:YES];
}
이 작업은 작업을 시작하고 버튼을 비활성화하지만 스레드를 차단하지는 않습니다. 스레드가 끝날 때까지 기다리지 않기 때문입니다. 대신, 작업이 완료 될 때마다 비동기식 알림을 기다리고 있습니다. 작업이 완료 될 때까지 버튼이 비활성화되므로 전송 된 모든 이벤트가 무시됩니다.
다른 팁
더 쉽게 :
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
제휴하지 않습니다 StackOverflow