2011-10-17 19 views
27

Tengo UITableView.In que he creado una celda personalizada con el botón de accesorio. Ahora, al hacer clic en el botón de accesorio, quiero crear otra vista con la funcionalidad de editar celda. ¿Para qué encuentro la ruta de índice de esa celda? paso los valles de esa celda?¿Cómo obtener Indexpath of cell en UITableView haciendo clic en el botón Custom accessory?

Como llamar siguiente método:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath 
+0

en ese método solo usted está recibiendo indexpath – Narayana

+0

es su botón es personalizado? si no, entonces vea el último argumento del método. Da indexpath – Maulik

Respuesta

84

La primera cosa a tener en cuenta es que cuando se utiliza la costumbre accessoryView en una celda, entonces el tableView: accessoryButtonTappedForRowWithIndexPath: método delegado podría no ser llamado. Debe agregar algún objetivo/acción al botón que está agregando como accesorio personalizado y manejar la acción de toque usted mismo. Usted debe agregar el accesorio de encargo algo como esto,

UIButton *accessory = ...; 
[accessory addTarget:self action:@selector(onCustomAccessoryTapped:) forControlEvents:UIControlEventTouchUpInside]; 
... 
cell.accessoryView = accessory; 

Y en el onCustomAccessoryTapped: Método usted tiene que obtener la ruta del índice de este tipo,

- (void)onCustomAccessoryTapped:(UIButton *)sender { 

    UITableViewCell *cell = (UITableViewCell *)sender.superview; 
    NSIndexPath *indexPath = [tableView indexPathForCell:cell]; 

    // Now you can do the following 
    [self tableView:tableView accessoryButtonTappedForRowWithIndexPath:indexPath]; 

    // Or you can do something else here to handle the action 
} 
+0

¿Qué ocurre si se crea el botón en UITableViewCell? – Maulik

+0

¿Quiere decir "qué ocurre si se crea el botón dentro de * cellForRowAtIndexPath: * method"? – EmptyStack

+0

no ... Tengo una celda personalizada subclasificando UITableViewCell. para eso si utilicé el código anterior, entonces devuelve UITableViewCellContainView !!! – Maulik

3

El indexPath se pasa como segundo parámetro del método.

3

usando "indexPathForCell" funciona como menciona emptystack

[yourViewController.tableView indexPathForCell: cell];

Además si está utilizando tableview y una búsqueda Ver, en su controlador, asegúrese de utilizar searchDisplayController

NSIndexPath *indexPath; 
NSDictionary *campaignMember; 
if(self.searchDisplayController.isActive) { 
     indexPath = [[self.searchDisplayController searchResultsTableView] indexPathForCell: cell]; 
     campaignMember = [self.filterResults objectAtIndex:indexPath.row]; 
} else { 
    indexPath = [self.tableView indexPathForCell: cell]; 
    campaignMember = [self.dataRows objectAtIndex:indexPath.row]; 
} 
NSString *id = [campaignMember objectForKey:@"Id"]; 

En mi caso "campaignMember" es un objeto persona y que necesitaba para obtener su ID. "self.dataRows" es una matriz que contiene datos de la tabla principal donde "self.filterResults" contiene un subconjunto o resultados de búsqueda/filtro de todos los datos en función de los criterios de búsqueda/filtro.

Cuestiones relacionadas