teclado tamaño por home flotante control centro cambiar boton aumentar aparece activar iphone objective-c xcode programmatically-created

iphone - tamaño - Agregue múltiples botones a una vista programáticamente, llame al mismo método, determine qué botón fue



control por boton iphone (9)

Quiero agregar varios UIButtons a una vista mediante programación: el número de botones es desconocido en el momento de la compilación.

Puedo hacer uno o más UIButton''s like (en un bucle, pero en corto por simplicidad):

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

Copiado / editado desde este enlace: ¿Cómo creo un UIButton básico mediante programación?

Pero, ¿cómo puedo determinar en buttonClicked: en qué botón se hizo clic? Me gustaría pasar datos de etiquetas si es posible para identificar el botón.


Alguien podría tener este problema:

La respuesta de Jason Coco funcionó bien para mí, hasta que quise usar la etiqueta para acceder a las propiedades de una NSArray que se definió como una propiedad.

Resulta que la propiedad tenía que definirse como "retener" en lugar de "débil".



La versión Swift (con etiquetas):

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

Llame usando el uso de self.viewWithTag (i) como UILabel:

(cell.viewWithTag(5) as UILabel).text


Para cada uno de sus botones, establezca una etiqueta apropiada y luego refiérase a la etiqueta en su acción. es decir

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

Puede establecer fácilmente la etiqueta según el índice de su iteración, si está creando botones en un bucle. Y luego en tu acción:

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


Para eso, asigne una etiqueta diferente a cada botón y use un código como este:

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

y en metodo

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

y así sucesivamente para comprobar qué botón se llama


Puede asignar una etiqueta al botón.

button.tag = i;

Luego, en -buttonClicked: compruebe la etiqueta del remitente:

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


Puede mantener una referencia al objeto de botón real en algún lugar que sea importante (como una matriz) o establecer la etiqueta del botón en algo útil (como un desplazamiento en alguna otra matriz de datos). Por ejemplo (usando la etiqueta, ya que esto generalmente es útil):

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


Si desea agregar botones en el tiempo de ejecución, habrá 10 20 50 o más que eso. Entonces deberías usar la vista de desplazamiento ui en esta condición.

Cuando se generarán los botones, el tamaño de la vista de desplazamiento debe aumentarse en consecuencia.

Y puedes escribir el código así

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


UIButton tiene una propiedad de tag . Use eso y en su método buttonClicked , puede marcar el botón en el que se hizo clic en función de su etiqueta. Es posible que desee mantener constantes alrededor de qué botón es qué.