0

現在、私のプログラムの続行を妨げている Objective-C ベースの質問に答えていただけることを願っていました。

タイトル 1、2、3 などのボタンのグリッドがあるゲームがあります。これらのボタンのそれぞれが、名前、年齢などのさまざまな情報を渡す GameScreen UIView に移動します。ユーザーが正しく質問すると、彼はグリッドに戻されます。ここで、彼が押したボタンに、以前のようにテキストを含む単なる空白のボタンではなく、目盛りを表示するようにします。

私の問題は、押されたボタンを追跡することです。メイン画面に戻ると「今押したボタンをダニ画像に変更」の言い方がわかりません。これまでのところ、すべて (null) として出てきました。

最初にボタンを押すと、 'if([sender.currentTitle isEqualToString:@"1"]) を使用して、通過させたい情報にタグを付けます-これは問題ありませんが、その後別のビューを通過したときにどのボタンが押されたかを失います。

各ボタンに固有の変数をずっと通過させ、if then else ステートメントを考え出して変数の値をテストすることもできます (つまり、if [questionansweredcorrectly isEqualToString :@"Question1"])。ここに百以上のボタンがあり、面倒です。

状況を十分に説明し、ここで使用する必要がある方法を誰かが指摘できることを願っています.

前もって感謝します!

編集:

他のビューにロードする方法に応じて、次のスタイルのコーディングを使用します。

GameScreen *screen = [[GameScreen alloc] initWithNibName:nil  bundle:nil]; 
screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
[self presentModalViewController:screen animated:YES];

これが新しいビューに移動する方法です。別の画面から同じことを行って、ボタンを使用してメイン画面に戻ります。この作品では絵コンテは使いません。これは、ビューをどのように通過するかを明確にするのに役立ちますか? 絵コンテは使いません。

4

2 に答える 2

0

これはデザインパターンの問題だと思います。これがどのように実装されているかを正確に理解しているとは思いませんが、これを攻撃する方法を次に示します。

に基づいて適切に構成された、GameScreenViewController のインスタンスを表示するボタンでいっぱいの QuestionGridViewController があります。

  1. ボタンがタップされた
  2. ユーザー。

ここでは MVC に従ってみましょう。すべての質問を保持できるモデル クラスが必要です (また、そのデータをカプセル化するための質問オブジェクトを持つこともできます)。

また、ユーザーとその詳細を表すものも必要です。

QuestionGrid の viewDidLoad で、質問モデルから質問を読み込み、ビューに入力します。すでに完了しているものには、チェックマークが設定されている必要があります。

これらすべてのボタンの押下に対して、ユーザー オブジェクトと質問オブジェクトを引数として取るカスタム イニシャライザで GameScreen を初期化します。

GameScreen の回答が送信されたら、質問オブジェクトを更新します。QuestionGrid が再度読み込まれると、更新された質問が読み込まれます。どちらのビュー コントローラーも、別のビュー コントローラーにデータを渡す必要はありません。

これは、MVC に従うことの大きな利点です。ロジックからデータを抽象化し、そうすることで、このような問題で正気を保つことができます。

これがあなたが解決しようとしていた問題だったかどうかはわかりませんが、SirKaydian が指摘したように、あなたがどのように取り組んでいるかは特に明らかではありません。しかし、優れたアプリケーション設計によって、このような些細な問題を回避できることをお見せできたと思います。

于 2012-06-03T16:14:32.430 に答える
0

私が理解したことから、あなたは最初の見解を完全に却下します。または、最初のビューをリロードして、もう一度表示する必要があります。

ビューの読み込み方法について100%ではありませんが、これが役立つと思います:

前のビュー (すべてのボタンを含む) を表示するには、最初のビューの上にロードしたビューで次のコードを使用するだけです。

[self dismissModalViewControllerAnimated:YES];

それが役に立てば幸い!

于 2012-06-03T15:47:30.810 に答える