28

複数の UIButtons をプログラムでビューに追加したい - ボタンの数はコンパイル時に不明です。

1 つ以上の UIButton を次のように作成できます (ループ内ですが、簡単にするために短くしています)。

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self 
       action:@selector(buttonClicked:)
forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Button x" forState:UIControlStateNormal];
button.frame = CGRectMake(100.0, 100.0, 120.0, 50.0);
[view addSubview:button];

このリンクからコピー/編集: プログラムで基本的な UIButton を作成するにはどうすればよいですか?

しかし、buttonClicked: でどのボタンがクリックされたかを判断するにはどうすればよいでしょうか? ボタンを識別するために、可能であればタグデータを渡したいです。

4

9 に答える 9

46

実際のボタン オブジェクトへの参照を重要な場所 (配列など) に保持するか、ボタンのタグを便利なもの (他のデータ配列のオフセットなど) に設定することができます。例:

for( int i = 0; i < 5; i++ ) {
  UIButton* aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
  [aButton setTag:i];
  [aButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
  [aView addSubview:aButton];
}

// then ...

- (void)buttonClicked:(UIButton*)button
{
  NSLog(@"Button %ld clicked.", (long int)[button tag]);
}
于 2010-04-15T14:51:14.917 に答える
7

ボタンにタグを付けることができます。

button.tag = i;

次に で-buttonClicked:、送信者のタグを確認します。

-(void)buttonClicked:(UIButton*)sender {
   int tag = sender.tag;
   ...
}
于 2010-04-15T14:47:33.300 に答える
1

そのためには、各ボタンに異なるタグを付け、次のようなコードを使用します。

[btn1 addTarget:self action:@selector(pressbtn:) forControlEvents:UIControlEventTouchUpInside];   
   [btn2 addTarget:self action:@selector(pressbtn:) forControlEvents:UIControlEventTouchUpInside];

& インメソッド

-(void)pressbtn:(id)sender    {
 UIButton *button=sender;
        if (button.tag==1)
{
  NSLog(@"Press button 1");
}
    if (button.tag==2)
{
  NSLog(@"Press button 2");
}

など、どのボタンが呼び出されているかを確認します

于 2011-11-18T04:09:01.383 に答える
1

実行時にボタンを追加する場合は、10 20 50 またはそれ以上になります。次に、この状態で ui scroll view を使用する必要があります。

ボタンが生成されると、それに応じてスクロール ビューのサイズを大きくする必要があります。

そして、あなたはこのようなコードを書くことができます

scrollview = [[UIScrollView alloc] init];      
        scrollview.contentSize = CGSizeMake(INVOICE_ADDITEM_SCROLLVIEW_CONTENT_WIDTH, INVOICE_ADDITEM_SCROLLVIEW_CONTENT_HEIGHT);
        scrollview.frame = CGRectMake(0,50, SCROLLVIEW_WIDTH, SCROLLVIEW_HEIGHT);
        //  scrollview.backgroundColor = [UIColor whiteColor];
        scrollview.scrollsToTop = NO;
        scrollview.delegate = self;
        [self.view addSubview:scrollview];


  for (int pos = 0; pos < 2; pos++) {
            UIButton *but = [UIButton buttonWithType:UIButtonTypeCustom];
            [but setImage:[UIImage imageNamed:@"checkbox.png"] forState:UIControlStateNormal];
            [but setImage:[UIImage imageNamed:@"checkbox_active.png"] forState:UIControlStateSelected];
            [but setFrame:CGRectMake(TXT_FLD_X_CORD+90, 295, 20, 20)];
            //            [but setCenter:CGPointMake( 50,  i*40+20 )];
            but.tag = pos;
            /*if(pos==0)
            {
            [but setImage:[UIImage imageNamed:@"checkbox_active.png"] forState:UIControlStateNormal];
           // [but setImage:[UIImage imageNamed:@"checkbox_active.png"] forState:UIControlStateSelected];
            }*/
            [but setCenter:CGPointMake(pos*90+125 ,310)];
            [but addTarget:self action:@selector(checkboxButton:) forControlEvents:UIControlEventTouchUpInside];
            [scrollview addSubview:but];
        }
于 2012-09-05T13:24:48.983 に答える
0

Swift バージョン (ラベル付き):

 for index in 1...5 {
      var label = UILabel()
      label.tag = index
      labelsDictionary["Label\(index)"] = label
      self.addSubview(label)
    }

UILabel として self.viewWithTag(i) を使用して呼び出します。

(cell.viewWithTag(5) as UILabel).text
于 2015-01-20T01:39:18.973 に答える
0

誰かがこの問題を抱えているかもしれません:

タグを使用して、プロパティとして定義された NSArray からプロパティにアクセスするまで、Jason Cocoの答えはうまくいきました。

プロパティを「弱い」ではなく「保持」として定義する必要があることが判明しました。

于 2013-03-24T22:13:24.290 に答える
0

UIButton にはtagプロパティがあります。それを使用して、buttonClickedメソッドで、そのタグに基づいてクリックされたボタンを確認できます。どのボタンが何なのかについて定数を保持したい場合があります。

于 2010-04-15T14:48:34.940 に答える
0

ボタンごとに適切なタグを設定し、アクションでタグを参照します。すなわち

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
...
button.tag = 1
[view addSubview:button]; 

ループでボタンを作成している場合は、繰り返しのインデックスに基づいてタグを簡単に設定できます。そして、あなたの行動で:

- (void)aButtonWasTapped:(UIButton *)source {
    if( source.tag == 1 ) {
        // etc
    }
}
于 2010-04-15T14:52:29.533 に答える