0

探しているものと同様の結果が得られる質問/回答を1つ見ましたが、説明したコードは現在よりもはるかに複雑でした。

for()ループを使用して、配列から一連のボタンを作成しています。次に、アクションがありますが、ボタンを認識できません。それで:

NSArray *numbers = [NSArray arrayWithOjbects:@"1", "2", "3", nil];

for (int i = 0; i <  [numbers count]; i++) {

   button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
   [button addTarget:self action:@selector(recognize:) forControlEvents:UIControlEventTouchDown];
   [button setTitle:[numbers objectAtIndex:i] forState:UIControlStateNormal];
   button.frame = CGRectMake(x, y, w, l);

   }

それで:

-(void) recognize:(id)sender {

   NSLog (button.titleLabel.text);

 }

ただし、ボタンが押されているかどうかに関係なく、配列の最後のメンバー(3)しか取得できません。-(void)recognize:(id)sender ...知っておくべきこと...のステップが欠けていると思いますが、今は完全に逃げています。

/ Vlad

4

1 に答える 1

0

ループの各反復は変数に割り当てられbuttonます。ループが終了すると、ループに割り当てられた最後の値が保持されます。変数はインスタンス変数のbuttonように見えます。ボタンではなく、クラスのインスタンスに固有です。

あなたが望むことをする便利な方法はsender、iOSがあなたのメソッドに提供する変数にアクセスすることです。これは、問題のイベントを生成したオブジェクト(この場合はボタン)を保持します。

NSLog (@"%@", ((UIButton *)sender).titleLabel.text);

また、その方法でテキスト値をログに記録することは許可されないことに注意してください。フォーマット文字列(など%@)が含まれている場合、それは取得しない追加の引数を予期し、クラッシュします。 これはセキュリティホールになる可能性があります。 ログに記録する文字列変数がある場合は%@、上記のようにログに記録するために使用します。Xcodeはすでにこれについて警告しているはずです。警告を無視しないでください。

于 2012-05-22T00:12:12.313 に答える