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".
Creo que esta sería la mejor respuesta: -
http://conecode.com/news/2012/05/ios-how-to-create-a-grid-of-uibuttons/
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é.