2009-10-02 20 views

Respuesta

2

Eso no es posible. Hay que crear un método de conformación a IBAction

- (IBAction)buttonXYClicked:(id)sender; 

En este método se puede crear y llamar a la UIAlertView. No olvides conectar el botón con el método en Interface Builder.

Si desea distinguir entre varios botones (por ejemplo, tiene uno en cada celda de la tabla) puede establecer la propiedad de etiqueta del botón. Y luego verifique sender.tag desde qué botón aparece el clic.

+0

No es necesario que use IBAction. Ver otras respuestas –

9

Si está utilizando Button en Tableviewcell, debe agregar el valor de la etiqueta al botón de cada celda y establecer el método addTarget con id como parámetro.

Código de ejemplo:

que tiene que escribir código continuación en cellForRowAtIndexPath método.

{ 

    // Set tag to each button 
     cell.btn1.tag = indexPath.row; 
     [cell.btn1 setTitle:@"Select" forState:UIControlStateNormal]; // Set title 

    // Add Target with passing id like this 
     [cell.btn1 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];  


    return cell; 

} 

-(void)btnClick:(id)sender 
{ 

    UIButton* btn = (UIButton *) sender; 

    // here btn is the selected button... 
     NSLog(@"Button %d is selected",btn.tag); 


    // Show appropriate alert by tag values 
} 
+0

Excelente !!, ¡buen casting !, ¡esta respuesta es muy informativa! ¡Gracias! – MaKo

1

respuesta de Jay es grande, pero si tiene varias secciones que no funcionará ya que el indexRow es local to a section.

Otro método, si está utilizando botones en un TableView que tiene varias secciones, es pasar los eventos táctiles.

Cuando se declara el botón dentro de un cargador perezoso:

- (UIButton *)awesomeButton 
{ 
    if(_awesomeButton == nil) 
    { 
     _awesomeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
     [_awesomeButton addTarget:self.drugViewController action:@selector(buttonPressed:event:) forControlEvents:UIControlEventTouchUpInside]; 
    } 

    return _awesomeButton; 
} 

La clave aquí es que la cadena de eventos sobre el método de selección. No puede pasar sus propios parámetros, pero puede pasar los eventos.

La función del botón se engancha a:

- (void)buttonPressed:(id)sender event:(id)event 
{ 
    NSSet *touches = [event allTouches]; 
    UITouch *touch = [touches anyObject]; 

    CGPoint currentTouchPosition = [touch locationInView:self.tableView]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition]; 

    NSLog(@"Button %d was pressed in section %d",indexPath.row, indexPath.section); 
} 

La clave aquí es la función indexPathForRowAtPoint. Esta es una función ingeniosa en UITableView que le dará el indexPath en cualquier punto. También es importante la función locationInView porque necesita el toque en el contexto de tableView para que pueda identificar el indexPath específico.

Esto le permitirá saber qué botón era, en una tabla con varias secciones.

Cuestiones relacionadas