Asigne el evento UIButton dinámicamente en UITableViewCell

Creé una subclase UITableViewCell personalizada que contiene un botón llamado testbtn. Luego traté de asignar un evento de ese botón a otra clase, pero eso no funciona para mí. Por favor, ¿puede decirme dónde me estoy equivocando?

Aquí está mi código:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifier = @"PatientCell";
    PatientCell *cell = (PatientCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
            NSArray *TopLevelOb = [[NSBundle mainBundle] loadNibNamed:@"PatientCell" owner:self options:nil];
            for (id currentlevelob in TopLevelOb) {
                if([currentlevelob isKindOfClass:[PatientCell class]]){
                    cell = (PatientCell *) currentlevelob;
                    cell.test.text = @"some text";
                    cell.HR.text =@"80";
                    cell.ABP.text =@"120/20";
                    cell.SOP2.text =@"95";
                    cell.RR.text=@"98";
                    [cell.testbtn addTarget:self action:@selector(openLiveData:)   
                       forControlEvents:UIControlEventTouchUpInside];// **this event is not fire to openLiveData method**
                    break;
                }
            }
        } else {
            NSArray *TopLevelOb = [[NSBundle mainBundle] loadNibNamed:@"PatientCell_iPad" owner:self options:nil];
            for (id currentlevelob in TopLevelOb) {
                if([currentlevelob isKindOfClass:[PatientCell class]]){
                    cell = (PatientCell *) currentlevelob;
                    cell.test.text = [nameArry objectAtIndex:indexPath.row];
                    cell.HR.text =@"80";
                    cell.ABP.text =@"120/20";
                    cell.SOP2.text =@"95";
                    cell.RR.text=@"98";
                    [cell.testbtn addTarget:self action:@selector(openLiveData:) forControlEvents:UIControlEventTouchUpInside]; 
                    break;
                }
            }     
        }
    }
    return cell;
}

-(IBAction)openLiveData:(id)sender{
     NSLog(@"hello ");
 }

preguntado el 12 de junio de 12 a las 07:06

Entonces, ¿todas tus celdas están dibujadas, pero no puedes presionar el botón? ¿No imprime a la consola si lo presionas? -

Verifique si el botón está conectado a la variable de instancia testBtn en su NIB. -

@AdrianAncuta sí. no llamó a ese mathode que se imprime en la consola -

@timthetoolman ay!! sry me olvidé de vincular la variable de instancia a mi XIB -

ya ahora está funcionando gracias chicos -

3 Respuestas

Verifique si su botón está conectado a la variable de instancia testBtn en su NIB.

Buena suerte

T

Respondido el 12 de junio de 12 a las 16:06

Haga esto como se olvidó de especificar el evento de control:

  [cell.testbtn addTarget:self action:@selector(openLiveData:) forControlEvents:UIControlEventTouchUpInside];

Espero que sea útil

Respondido el 12 de junio de 12 a las 07:06

Debería funcionar bien en la versión de iPhone, pero debería ser un problema en la versión de iPad como mencionaste forControlEvents:UIControlStateNormal en lugar de forControlEvents:UIControlEventTouchUpInside.

Respondido el 12 de junio de 12 a las 08:06

No debería funcionar bien en la versión para iPhone y en la versión para iPad también - Bittu

Veo que has actualizado el código. Si está intentando escribir un selector del botón, ¿por qué no escribir en la clase de celda personalizada? Puede ahorrarle muchos problemas de esa manera, también puede conectarlo a través del archivo Nib. - farrukh javeid

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.