¿Cómo se desactiva la selección de solo una celda en una UITableView? Tengo varios, y solo quiero que el último esté deshabilitado.Deshabilitar la selección de una sola UITableViewCell
Respuesta
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = ...
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
Esto evitará que la celda parezca seleccionada, pero 'tableView: didSelectRowAtIndexPath:' seguirá siendo invocada. – Brian
Vea mi respuesta para una solución limpia que realmente funciona. – Barry
Usar tanto 'cell.selectionStyle = .None' como' cell.userInteractionEnabled = false' combinado cubrirá la mayoría de los escenarios. – SwiftArchitect
-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([self numberOfRowsInSection] == [indexPath row]) {
return nil;
} else {
return indexPath;
}
}
la última fila de la tabla no se seleccionarán
Esto evitará que realmente se seleccione la celda, pero aún se resaltará cuando el usuario la toque – Brian
Lo siento, necesito agregar el estilo UITableViewCellSelectionStyleNone a la celda –
Podría agregar que configurar el estilo de selección de tabla vista debe hacerse en cellForRowAtIndexPath: to evite el retraso al cargar TableView (la vista de tabla tarda 1-2 en deshabilitar la selección para la celda). –
Para detener el uso sólo algunas células siendo seleccionados:
cell.userInteractionEnabled = NO;
Así como la prevención de la selección, esto también se detiene tableView : didSelectRowAtIndexPath: se llama para las celdas que lo tienen configurado. También hará que la voz en off la trate igual que un botón atenuado (que puede o no ser lo que desea).
Tenga en cuenta que si tiene elementos interactivos en la celda (es decir, conmutadores/botones), necesitará usar cell.selectionStyle = UITableViewCellSelectionStyleNone;
en su lugar y luego asegúrese de ignorar los toques en la celda en tableView:didSelectRowAtIndexPath:
.
Intente hacer esto en la vista que recibe el resaltado. De lo contrario, es lo mismo que deshabilitar la celda. –
No puedo usar esto porque también deshabilita 'cell.accessoryView', que he configurado como' UIButton' que quiero que se pueda tocar. – ma11hew28
Además, esto hará que Voice Over trate incorrectamente la celda como un botón atenuado en lugar de texto estático (con un accesorio opcional). – Endersstocker
Como mencioné in another thread todos los métodos anteriores no resuelven el problema con precisión. La forma correcta de desactivación de una célula es por medio del método
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
y en que el método uno tiene que usar
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
que desactiva la selección celular, pero todavía permite al usuario interactuar con subvistas de la celular como un UISwitch.
tirar esto en su aduana Tabla VC:
// cells lacking UITableViewCellAccessoryDisclosureIndicator will not be selectable
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
if (cell.accessoryType != UITableViewCellAccessoryDisclosureIndicator) {
return nil;
}
return indexPath;
}
// disabled cells will still have userinteraction enabled for their subviews
- (void)setEnabled:(BOOL)enabled forTableViewCell:(UITableViewCell *)tableViewCell
{
tableViewCell.accessoryType = (enabled) ? UITableViewCellAccessoryDisclosureIndicator : UITableViewCellAccessoryNone;
// if you dont want the blue selection on tap, comment out the following line
tableViewCell.selectionStyle = (enabled) ? UITableViewCellSelectionStyleBlue : UITableViewCellSelectionStyleNone;
}
A continuación, para permitir la selección/desactivar para someTableViewCell, hacer esto:
[self setEnabled:state forTableViewCell:someTableViewCell];
Ha terminado y puede enviar.
¡Gracias, esto funciona como un encanto! – Harry
La solución más limpia que he encontrado para esto solo hace uso del método de delegado willDisplayCell.
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if([indexPath row] == 0) //<-----ignores touches on first cell in the UITableView
{ //simply change this around to suit your needs
cell.userInteractionEnabled = NO;
cell.textLabel.enabled = NO;
cell.detailTextLabel.enabled = NO;
}
}
Usted no tiene que tomar ninguna otra medida en el didSelectRowAtIndexPath método delegado para asegurar que la selección de esta célula se ignora. Se ignorarán todos los toques en esta celda y el texto en la celda también se atenuará.
con iOS 6.
Se puede utilizar el siguiente método delegado y regresar NO
en caso de que no se a ser seleccionado y YES
en caso de que quiera que sea seleccionado.
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
return indexPath.section == 0;
}
probar este en Swift:
self.tableView.deselectRowAtIndexPath(indexPath, animated: true)
Si alguien se pregunta cómo lograr esto en veloz entonces aquí es mi código. Estoy usando Xcode 7 y probado usando iPad Retina (iOS 9).
cell.selectionStyle = UITableViewCellSelectionStyle .None
cell.userInteractionEnabled = false
Intente colocar este código de dos líneas si lo desea. En mi caso, he usado esto en este método para mostrar celdas.
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)
Recuerde esta línea de código de dos bloqueará cualquier tipo de selección o la interacción de sus células, pero sólo se puede utilizar la primera línea de forma individual si lo desea. Es decir ...
cell.selectionStyle = UITableViewCellSelectionStyle .None
Solo esta línea bloqueará la selección de sus celdas.
Sin embargo, la segunda línea hará que la celda sea "Solo lectura". Es decir ..
cell.userInteractionEnabled = false
Gracias
Espero que esto ayudó.
- 1. Establecer altura programáticamente para una sola UITableViewCell?
- 2. Una sola selección en la lista vista
- 3. altura Animate UITableViewCell en la selección
- 4. UITableViewController - deshabilitar selección
- 5. Deshabilitar la autenticación de Windows en una sola ubicación
- 6. Android: deshabilitar la selección de ListView
- 7. ¿Deshabilitar selección múltiple?
- 8. Desactivar efecto de selección al seleccionar UITableViewCell
- 9. Seleccionando UITableViewCell AccessoryView, separado de la fila de selección
- 10. Cambie el separador UITableViewColor por una sola UITableViewCell
- 11. UITableViewCell setSeleccionado, pero no se muestra la selección
- 12. imagen de android dentro de una sola selección
- 13. Deshabilitar JavaScript en una sola pestaña de Firefox
- 14. Cómo deshabilitar la selección de caja de camello en Eclipse
- 15. Cómo deshabilitar la selección en un cuadro de texto
- 16. Deshabilitar la opción de selección en IOS Safari
- 17. jqgrid: selección múltiple y deshabilitar comprobación (condicional)
- 18. Desactivar Android GridView resaltando por completo (deshabilitar la selección)
- 19. WPF XAML: ¿Cómo deshabilitar la selección múltiple en un DataGrid?
- 20. ¿Puedo deshabilitar la selección en un elemento UIPickerView específico?
- 21. ¿Cómo retener o animar el color de fondo de la subvista en UITableViewCell en la selección?
- 22. ¿Hay alguna manera de deshabilitar la cobertura de código en PHPUnit para una sola prueba?
- 23. Cambiar la altura de una UITableViewCell
- 24. Posicionando la imageView de una UITableViewCell
- 25. obtener una sola fila de la tabla
- 26. ASP.NET: deshabilitar la autenticación para una sola página aspx (página de error personalizada)?
- 27. ¿Cómo extiendo la selección al límite de palabras usando JavaScript, una sola vez?
- 28. Girar una UITableViewCell personalizada
- 29. Desactivación de la validación del certificado para una sola solicitud
- 30. La edición de un UITextField dentro de una UITableViewCell falla
posible duplicado de [UITableview: Cómo desactivar la selección para algunas filas pero no otras] (http://stackoverflow.com/questions/2267993/uitableview-how-to-disable-selection-for-some-rows-but -no-otros) – JosephH