UITableView didSelectRowAtIndexPath no se llama en el primer toque
ios5 (7)
Agregue este código en su método viewDidLoad
[self.tableView reloadData]
Estoy teniendo un problema con el comando didSelectRowAtIndexPath de UITableView de ios 5, que es correcto en ios 4.
La primera vez que toco cualquier fila de la tabla, no se llama al método. Una vez que selecciono otra fila, llama a didSelectRowAtIndexPath, pero pasa la última indexPath.
Ya he configurado tableView.delegate y puede ejecutarse correctamente en ios4.
MainView.xib
UITabBarController
--UINavigationController
--**UITableViewController**
¿Alguna sugerencia?
- (void)viewDidLoad
{
[super viewDidLoad];
self.tableView.delegate = self;
self.tableView.dataSource = self;
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 10;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.text = [[NSString alloc]initWithFormat:@"%d",indexPath.row];
return cell;
}
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"%d",indexPath.row);
}
Es posible que haya implementado (observe la Deselección ): didDeselectRowAtIndexPath
... de ahí el desencadenante al seleccionar una nueva celda que anula la selección de la primera, y el registro de indexPath como la primera también.
SOLUCIÓN: didSelectRowAtIndexPath
Sí, se ven muy similares, y no ayuda que didDeselectRowAtIndexPath
es el primer método que el autocompletado de Xcode selecciona la mayor parte del tiempo.
CÓDIGO COMPLETO:
// right
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {}
No estoy seguro de si esto ha sido respondido pero estaba corriendo con este problema y al igual que "Anna Karenina" comentó anteriormente. Asegúrese de prestar mucha atención a los detalles.
Esto se debe a que implementas el DEselect
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
Esto hará que el primer clic no funcione, pero luego de hacer clic y cualquier otra celda funcionará como se esperaba.
Solución : asegúrese de prestar atención y usar didSelectRowAtIndexPath
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
Espero que ayude y como mencione antes, esto fue resuelto por "Anna Karenina".
Por favor, conecte el delegado de Xib a los propietarios de archivos. Entonces inténtalo funcionará.
Por favor, intente cambiar su -viewDidLoad
de -viewDidLoad
al código de abajo (inserte la última línea). Cuéntame sobre los resultados.
- (void)viewDidLoad
{
[super viewDidLoad];
self.tableView.delegate = self;
self.tableView.dataSource = self;
[self.tableView reloadData];
}
También tuve este problema al pasar datos a otro VC. Lo resolví cambiando a un segmento manual de la Tabla VC al detalle VC.
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedData = data[indexPath.row]
performSegue(withIdentifier: "Detail", sender: self)
}
Tenía un UIGestureRecognizer en la vista dentro del guión gráfico. Tuve que quitarlo y funcionó como siempre.