1

私が取り組んでいるMacアプリケーションの一部として、ユーザーは画面に入力して「処理」ボタンを押します。実行された編集があり、すべてが編集に合格すると、数分のプロセスが実行され、正常に終了するかどうかが決まります。そのプロセスで一連のステータスと処理メッセージを別のスクロールウィンドウに吐き出し、問題が発生した場合にユーザーがログに戻って何かが表示されるかどうかを確認できるようにしたいと思います。

このタイプの処理を確認して使用するのに最適なオブジェクトとメソッドは何ですか?

2011年11月24日追加

最初の提案に従って、2番目のXIBを作成し、それに合わせてNSWindowControllerを作成し、準備作業としてすべてをまとめました。アプリデリゲートでボタンを押すと、次のようになります。

- (IBAction)runButtonPressed:(id)sender {

RunResultWindow *wc;

wc = [[RunResultWindow alloc] initWithWindowNibName:@"RunResultWindow"];

[wc showWindow:self];

}

RunResultWindowは、XIBとそれを制御するNSWindowControllerクラスの名前です。また、終了ボタンを追加し、プロセスの結果がテキストウィンドウに表示されるように配線し、ユーザーが[完了]または[終了]を押すか、ボタンを呼び出すまでそこにハングアップします。

メインウィンドウのボタンを押すと実際にはウィンドウが表示されますが、ボタンのコードが終了するとウィンドウが消えます。明らかに、私は(重要な)ステップを省略しています。

ウィンドウが表示されたら、テキストビューなどを追加して機能させることができます。私が欲しいのは、ユーザーが「完了」ボタンを押すと、新しいウィンドウにフォーカスが移り、閉じられるようにすることです。

さらに、windowメソッドからウィンドウコントローラーのウィンドウを取得し(アドレスを返しました)、NSWindowControllerのwindowDidLoadメソッドでいくつかのウィンドウフォーカスメソッドを試しましたが、ダイスはありませんでした。

私がこれについて得ることができるどんな情報にも再び感謝します。

2011年11月25日追加

ええと。たぶん、ボタンメソッドに埋め込むのではなく、クラスインスタンスをivarにすると、機能します。LeOops。

4

2 に答える 2

1

NSTextViewをウィンドウにドロップして、テキストを選択してスクロールすることはできますが、コンテンツを編集することはできないようです。

メソッドを使用するのと同じくらい簡単にテキストを挿入できますinsertText:

于 2011-11-21T02:37:06.950 に答える
0

だから...NSTextViewとのinsertText組み合わせはややうまくいきましたが、それが最終的な答えではないと思います。まず、私の理解では、これinsertTextは実際にはユーザー入力のみを対象としており、オブジェクトへのバックグラウンドの「システム」入力はNXTextStorage対象としていません。理由はわかりませんが、それで問題ないので避けます。他のオプションがあります。私はbeginEditandendEditメソッドを見つけましたが、詳細なデリゲートメソッドについてはさらに作業が必要ですが、ほぼ同じように機能します。

うまく機能しない部分はNSScrollView、ウィンドウ内でオンデマンドで更新することです。私はやることbeginEditをして、オブジェクトを適切endEditに更新することができます。NSTextStorage同じ方法でこれを複数回行うことができます(スクロールビューを含むウィンドウのテストボタン)。デバッグのprint-objectは、適切なタイミングで期待していることを示しているので、それがわかります。ただし、メソッドNSScrollViewの法廷で更新されたものを複数回表示できるようにしたいと思います。windowDidLoadボタンを押す方法が終了すると、スクロールビューが正しく更新されます。

ここにいくつかのサンプルコードがあります。私はここでミックスinsertTextと開始/終了編集メソッドを実行しますが、実際に使用するどのコードよりもテスト的なものでした。

(IBAction)FinishButtonPush:(id)sender {

    NSString *teststring;
    teststring = [NSString stringWithString: @"show"];
    [RunResultWindowTextView setString:teststring];
    teststring = [NSString stringWithString: @"show show"];
    [RunResultWindowTextView setString:teststring];
    teststring = [NSString stringWithString: @"show show show show"];
    [RunResultWindowTextView setString:teststring];
    [RunResultWindowTextView insertText:@"123"];
    NSTextStorage *tempTextStorage;

    tempTextStorage = [RunResultWindowTextView textStorage];

    [tempTextStorage beginEditing];
    [tempTextStorage replaceCharactersInRange:NSMakeRange(5,13)
                            withString:@"Hello to you!"];
    [tempTextStorage endEditing];

    [tempTextStorage beginEditing];
    [tempTextStorage replaceCharactersInRange:NSMakeRange(10,13)
                            withString:@"second change"];
    [tempTextStorage endEditing];

    [RunResultWindowTextView insertText:@"xxx123"];
    [RunResultWindowTextView insertText:@"xxx123567"];
}

オブジェクトが適切に更新されていてもNSTextStorage、スクロールビューはメソッドが完了したときにのみ更新されます。私の理解では、それprocessEditは中に自動的に呼び出されますendEdit。見るためだけにそこに追加processEditしましたが、コマンドをどこに置いたかによって、異常終了するか、変更がないかのどちらかでした。

これは削除されましたが、理由はわかりません。投稿をゴングする場合は、その理由を教えてください。何が悪かったのかわからない限り、投稿を改善することはできません。

于 2011-11-29T01:00:09.887 に答える