XCODE と Objective-C を使用する MAC では、スピナーとキャンセル ボタンを含む小さな「 BUSY 」ウィンドウを表示する必要があります。これにより、長い操作が完了するまで、ユーザーはアプリケーションで他の操作を行うことができなくなりますが、キャンセルをクリックすると、操作が停止するはずです。
キャンセルボタン付きのシンプルなNSWindowController
ベースのウィンドウを作成して、そのウィンドウをモーダルにしてみました....
-(void) start_long_operation {
...
...
[self showBusy];
return; // return to continue the long operation
}
// 「ビジー」ダイアログ ボックスを表示するので、ユーザーは完了するまで何もできません
-(void) showBusy {
BusyNSWindow *loadingView = [[LoadingView alloc] initWithWindowNibName:@"LoadingView"];<br>
[[NSApplication sharedApplication] runModalForWindow:loadingView.window];
}
// キャンセルがクリックされた場合、長時間の操作を停止するシグナルを送信し、「ビジー」ダイアログ ボックスを閉じます
-(IBAction) cancel
{
// cancel was clicked inside the "busy" dialog box so signal process to stop long operation
}
しかし、何が起こるかというと、それは の中にとどまり、[[NSApplication sharedApplication] runModalForWindow:loadingView.window]
戻ってこないということです。「ビジー」ダイアログボックスが表示されている間に長い処理を続行できるように戻りたいので、これは機能しません。
キャンセル ボタンとスピナーを備えた小さな「ビジー」ウィンドウを作成し、ユーザーが操作が完了するまでそのウィンドウの外をクリックできないようにし、プログラムの残りの部分を正常に続行して、長時間運用?
-ラフネック