Добавьте несколько кнопок в просмотр программ, вызовите тот же метод, определите, какую кнопку это было

StackOverflow https://stackoverflow.com/questions/2646297

Вопрос

Я хочу программно добавлять несколько UIBUTTONS на вид на вид - количество кнопок неизвестно в момент компиляции.

Я могу сделать один или несколько понравий 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: какую кнопку нажал? Я хотел бы пройти данные тега, если это возможно, чтобы определить кнопку.

Это было полезно?

Решение

Вы можете поддерживать ссылку на фактический объект кнопки где-то, что имело значение (например, массив) или установить тег кнопки для чего-то полезного (например, смещение в каком-то другом массиве данных). Например (используя тег, поскольку это обычно должно полезно):

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]);
}

Другие советы

Вы можете назначить тег на кнопку.

button.tag = i;

Затем в -buttonClicked:, Проверьте тег отправителя:

-(void)buttonClicked:(UIButton*)sender {
   int tag = sender.tag;
   ...
}

Я думаю, что это будет лучший ответ: -
http://conecode.com/news/2012/05/ios-how-to-uite-a-grid-of-uibuttons/

Для этого дают другой тег на каждую кнопку и использовать код, как это:

[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");
}

и так далее, чтобы проверить, какая кнопка называется

Если вы хотите добавить кнопки во время выполнения, то будет 10 20 50 или более, чем это. Тогда вам следует использовать вид прокрутки пользовательского интерфейса в этом состоянии.

Когда кнопки будут генерировать, то размер вида прокрутки должен быть увеличен соответственно.

И вы можете написать код, как это

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];
        }

Убеттон имеет А. tag имущество. Использовать это и в вашем buttonClicked Метод, вы можете проверить кнопку, которая нажала на основе его тега. Может захотеть сохранить константы для какой кнопки что.

Для каждой из ваших кнопок установите подходящий тег, а затем обратитесь к тегу в вашем действии. т.е.

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

Вы можете легко установить тег на основе индекса вашей итерации, если вы создаете кнопки в цикле. А затем в ваших действиях:

- (void)aButtonWasTapped:(UIButton *)source {
    if( source.tag == 1 ) {
        // etc
    }
}

У кого-то может быть эта проблема:

Джейсон Коко Ответ работал нормально для меня, пока я не хотел использовать тег для доступа к свойствам из Nsarray, который был определен как свойство.

Оказывается, что собственность должна была быть определена как «сохранить» вместо «слабого».

Swift Version (с этикетками):

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

Позвоните, используя Self.ViewWithTag (i) как UILabel:

(cell.viewWithTag(5) as UILabel).text
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top