Estoy trabajando en un proyecto en el que tengo que preseleccionar una celda en particular.
Puedo preseleccionar una celda usando -willDisplayCell
, pero no puedo deseleccionarla cuando el usuario hace clic en cualquier otra celda.
- (void)tableView:(UITableView*)tableView
willDisplayCell:(UITableViewCell*)cell
forRowAtIndexPath:(NSIndexPath*)indexPath
{
AppDelegate_iPad *appDelegte =
(AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];
if ([appDelegte.indexPathDelegate row] == [indexPath row])
{
[cell setSelected:YES];
}
}
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
AppDelegate_iPad *appDelegte =
(AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];
NSIndexPath *indexpath1 = appDelegte.indexPathDelegate;
appDelegte.indexPathDelegate = indexPath;
[materialTable deselectRowAtIndexPath:indexpath1 animated:NO];
}
¿Puede usted ayudar?
Respuestas:
usa este código
Swift 3.0:
fuente
willSelectRowAt:
. Vea una respuesta más completa aquí: stackoverflow.com/questions/12693402/…Use el siguiente método en la vista de tabla de delegados
didSelectRowAtIndexpath
(O desde cualquier lugar)fuente
indexPathForSelectedRow
es un método y no una propiedad.[myTable indexPathForSelectedRow]
. Estaba recorriendo las celdas antes. ¡Gracias!Prueba esto:
fuente
Puede ser útil hacer una extensión en Swift para esto.
Swift 4 y Swift 5:
Extensión Swift (por ejemplo, en un archivo UITableViewExtension.swift):
Utilice, por ejemplo:
fuente
viewWillAppear()
método ayuda al usuario a comprender de dónde regresa.Verifique con el método delegado si es correcto o no. Por ejemplo;
para
fuente
Swift 4:
fuente
Esta es una solución para Swift 4
solo agrega
funciona a las mil maravillas
ejemplo:
fuente
Además de configurar la celda como seleccionada, también debe informar a tableView que la celda está seleccionada. Agregue una llamada a
-tableView:selectRowAtIndexPath:animated:scrollPosition:
suwillDisplayCell:
método: y podrá anular su selección normalmente.Asegúrese de usar UITableViewScrollPositionNone para evitar comportamientos de desplazamiento extraños.
fuente
[cell setSelected:YES]
podría omitirse:selectRowAtIndexPath
se encargará delselected
estado de la célulaEsto debería funcionar:
Solo asegúrese de que materialTable y tableView estén apuntando al mismo objeto.
¿Están los materiales conectados a tableView en Interface Builder?
fuente
Basado en la solución de saikirans, he escrito esto, lo que me ayudó. En el archivo .m:
Y en el archivo de encabezado:
Tampoco tengo mucha experiencia, así que verifique si hay pérdidas de memoria, etc.
fuente
Si desea seleccionar cualquier celda de la tabla con el primer clic y deseleccionar con el segundo, debe usar este código:
fuente
Swift 4:
fuente
self.tableView(tableView, didDeselectRowAt: indexPath)
despuéstableView.deselectRow...
porque no se llama automáticamenteSwift 2.0:
fuente
prueba esto
fuente
coloque este código de acuerdo con su código y obtendrá su celda deseleccionada.
fuente
¿Puedes probar esto?
Funcionó para mi.
fuente
Swift 3.0:
Siguiendo la sección de conformidad del protocolo de la guía de estilo rápido de ray wenderlich , para mantener los métodos relacionados agrupados, coloque esta extensión debajo de su clase de controlador de vista de esa manera:
fuente
Rápido
fuente
fuente
Swift 3
También me he encontrado con esto: cuando navegas o vuelves a la vista de tabla, generalmente no anula la selección de la fila seleccionada anteriormente para ti. Puse este código en el controlador de vista de tabla y funciona bien:
fuente
Swift 3/4
En ViewController:
En celda personalizada:
fuente
swift 3.0
fuente
Para que se desactive la selección de (DidDeselectRowAt) al hacer clic la primera vez debido a los datos precargados; debe informar a tableView que la fila ya está seleccionada para comenzar, de modo que un clic inicial luego deseleccione la fila:
// Swift 3:
fuente
Lo que he encontrado es que además de configurar la celda como seleccionada , debe informar a la vista de tabla para seleccionar la fila en la ruta de índice dada.
fuente