0

ドキュメントベースのココアアプリを開発しています。起動インターフェイスは GarageBand をモデルにしています。ウェルカム画面が表示され、2 つの交互表示 (セグメント化されたコントロールによって切り替えられます) のいずれかが表示されます: 「新規プロジェクトの作成」と「最近のプロジェクトの参照」。この各ビューは、専用の NSViewController (この場合は NewProjectViewControllerRecentProjectsViewController ) によって制御されます。

これを実現するために、空のドキュメントを作成する代わりに、起動時にこの「ようこそ画面」​​を表示するように NSDocumentController をサブクラス化しました (空のドキュメントは、ユーザーが特定の最小設定を指定するまで、私のアプリでは意味がありません)。

起動/最初のドキュメントの作成後、ユーザーが [Create New Project...] (つまり、新しいドキュメント) を選択すると、Welcome 画面の [New Project] タブと同じインターフェイスを再利用するウィンドウが表示されます。同じNewProjectViewControllerを作成し、そのビューをウィンドウに追加します。

どちらの場合も、View Controller のビューは .xib から作成されます。ビュー コントローラ自体はプログラムによってインスタンス化され、そのビューは -addSubview: を使用してウィンドウの既存のサブビューに追加されます。

NewProjectViewController のビューには、いくつかの編集可能な NSTextField インスタンスとその他のコントロールが含まれています。

問題: ビュー コントローラーのビュー内のすべての NSTextField インスタンスは、初回のみテキスト入力を受け入れます。ビューが表示された 2 回目以降、テキストを編集しようとすると、システム アラート サウンドが生成されます。テキスト選択 (強調表示) できますが、変更はできません。また、テキストはプログラムで変更できます。

他のコントロール (ポップアップ ボタン) は問題なく変更できます。

最初から [ようこそ] 画面ではなく [新しいドキュメント] ウィンドウを表示しようとしましたが、結果は同じです。

これはファーストレスポンダーの問題ですか?

4

1 に答える 1

0

OK、修正しました(ただし、なぜ機能しなかったのかはまだ正確にはわかりません)。

両方のプロンプト (「ようこそ」画面と「新しいプロジェクト」ウィンドウ) をモーダル ウィンドウとして実行するように変更しました。

「ようこそ」ウィンドウは、「終了」で -[NSApp abortModal] を呼び出し、「選択」で -[NSApp stopModal] を呼び出します。「新しいプロジェクト」ウィンドウは、「キャンセル」で -[NSApp abortModal] を呼び出し、「作成」で -[NSApp stopModal] を呼び出します。

ドキュメント コントローラー側では、各ウィンドウ コントローラーを調べて、ユーザーが正確に何を選択したかを確認し、それに応じて行動します (新しいドキュメントを作成する、最近使用したドキュメントを開く、何もしない、アプリを終了するなど)。

于 2012-04-14T13:18:59.107 に答える