すべてのウィンドウに、4つのUIButton(テキスト付き)と1つのUILabel(テキスト付き)を備えた50個のウィンドウを追加します。このようにする必要がありますか?もっと良い方法はありますか?
2 に答える
あなたがそれを助けることができるならば、特にそうする必要がほとんどないiOSで、追加のウィンドウを作成することは決して良い考えではありません。UIViewControllerサブクラスを作成し、それをルートビューコントローラーにする必要があります(これは、シングルビューアプリケーションテンプレートで既に設定されています)。次に、UIViewのサブクラスを作成します—これを「MyQuizView」と呼びましょう。「MyQuizView」には、5つのNSString(質問用に1つ、回答用に4つ)と整数を使用して正しい回答を判別するカスタム初期化子が必要です。UIViewControllerサブクラスは、これらのビューの50をインスタンス化して、モデルから値を渡し、それらをメインビューのサブビューにすることができます。
編集:UIViewサブクラスのカスタム初期化子の例を次に示します。
- (id) initWithFrame:(CGRect)frame question:(NSString*)ques answers:(NSArray*)ans correctAnswer:(int)correctAns{
self = [super initWithFrame: frame];
if (self) {
self.question = ques;
self.answers = ans;
self.correctAnswerNumber = correctAns;
[self setup];
}
return self;
}
カスタム初期化子は。で始まりますinit
。self
スーパークラスの指定された初期化子の戻り値に設定し、self
がnilでない場合は、通常、渡された引数を使用して状態を初期化します。最後にそれは戻りますself
。これは、あなたが正しいプロパティを持っていることを前提とし、呼び出されたメソッドを呼び出しますsetup
プロパティを正しい値に設定した後、それらを使用してラベルなどを作成できるようにします。または、渡された値を使用して、ラベルとボタンをすぐに作成し、ターゲットアクションを設定してサブビューとして配置することもできます。これにより、引数をプロパティとして保持する必要がなくなります。各ボタンに数値タグを付けると、答えが正しかったかどうかを知ることができます(初期化子に渡された整数に基づいて、どこかに格納する必要があります)。これはすべてメモリからのものですが、うまくいけば正しいです。
50 個のウィンドウ (これが MacOS の質問の場合) またはビュー (これが iOS の質問の場合) を作成するのに時間を無駄にしないでください。うわー、それはひどいでしょう。
代わりに、4 つのボタンと少なくとも 1 つのラベルを持つ単一のビューを作成します。
次に、質問と回答のリストからこれらの各項目の文字列値を設定できます。これらの質問は、plist ファイル、CoreData データベース、または解析可能なフラット ファイルなどに保存できます。4 つのボタンを " IBAction
" メソッドを介して (ゲーム?) コントローラーに接続します。