0

ファイルをアップロードして応答を解析する NSButton があります。私は次のことを実装したいと思います: ボタンをクリックすると、彼はファイルをアップロードし、応答を解析します。これが発生している間、ボタンのタイトルは「アップロード」から「キャンセル」に変わり、アップロードまたは解析中にボタンをもう一度押すと、解析またはアップロードのプロセスが停止するはずです。プロセスがキャンセルまたは成功すると、ボタンのタイトルは「アップロード」に戻ります。今ボタンをクリックすると、アップロードと解析を再開する必要があります。私が言いたいことを想像していただければ幸いです。英語は私の母国語ではありません ;)

前もって感謝します

4

4 に答える 4

1

このような単一のアクションを持つことができます。

- (IBAction)btnAction:(id)sender {

     NSButton *btn=(NSButton *)sender;

    [btn setTitle:([btn.title isEqualToString:@"Upload"] ? @"Cancel" : @"Upload")];

    if([btn.title isEqualToString:@"Upload"]){
        //Do upload and parsing
    }else{
        //Cancel upload and parsing
    }
}
于 2012-10-11T12:21:36.367 に答える
0

すべてのコントロールには、ターゲットとアクションがあります。ターゲットは通常、何らかのコントローラーオブジェクトです。ターゲットのアクションが呼び出されると(たとえば-multiPurposeButtonClicked:)、コントローラーの内部状態(BOOLと呼ばれる場合があります)を変更needsUploadし、送信者(ボタン)のタイトルを設定するか、この状態に基づいて他のアクティビティを実行できます。そのメソッドは、を呼び出す[self beginProcessingUpload]か、または[self cancelTheWholeThing]に基づいて呼び出す可能性がありますneedsUpload == YES。「アップロード完了」コールバックが発生すると、コントローラーの状態をリセットし、ボタンへのアウトレット(多分IBOutlet NSButton * uploadButton;)を使用してタイトルをリセットできます。

これにどのようにアプローチするかは本当にあなた次第です。より具体的な質問は、より焦点を絞った回答を得るでしょう。

于 2011-09-11T15:22:17.657 に答える
0

これを行うには、ボタンを最初に押したときに、応答をアップロードして解析する新しいスレッドを作成し、ボタンのタイトルを変更し、ボタンをもう一度押すと、スレッドを破棄してボタンのタイトルを元に戻す必要があります。戻るには、スレッドが完了したら、ボタンのステータスを元に戻すことも確認してください。


**ボタンクリックで実行する必要があるアクションを決定するには、スレッドへのハンドルをテストして、それがnilであるかどうかを確認します。そうでない場合は、新しいスレッドを作成します。そうでない場合は、終了してnilに設定します。(最初にnilに設定することを忘れないでください)。

于 2011-09-11T15:22:49.723 に答える
0

NSButton のアクションを代替セレクターに再割り当てできます。と の 2 つのセレクターがあるupload:(id)senderとしcancel:(id)senderます。

upload:最初に、セレクターを呼び出すように NIB をセットアップします。セレクターでは、upload:(Joshua が述べたように) アウトレットを使用して、ボタンのタイトルを変更してキャンセルし、アクションを変更できます。

- (IBAction)upload:(id)sender {
    [uploadButton setTitle:@"Cancel"];
    SEL cancelSelector = @selector(cancel:);
    [uploadButton setAction:cancelSelector];

    // Carry out upload actions
}

セレクターで、cancel:これらを以前の状態に戻すことができます。

- (IBAction)cancel:(id)sender {
    [uploadButton setTitle:@"Upload"];
    SEL uploadSelector = @selector(upload:);
    [uploadButton setAction:uploadSelector];

    // Carry out cancel actions
}

もちろん、アップロードが完了したときに [アップロード] ボタンを元に戻すことを検討するには、追加の処理を追加する必要があります。

于 2011-09-11T16:41:35.893 に答える