varias ultima tecla superpuesta seleccionar seleccionado seleccion rango qué quitar pulsada para mantener macro hasta dispersas deshacer desde debe datos con como celdas celda automatica activa ios objective-c iphone uitableview interface-builder

ios - ultima - ¿Cómo deseleccionar una celda UITableView seleccionada?



qué tecla se debe mantener pulsada para seleccionar un rango de celdas dispersas (22)

¿Puedes probar esto?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { AppDelegate_iPad *appDelegte = (AppDelegate_iPad *)[[UIApplication sharedApplication] delegate]; NSIndexPath *indexpath1 = appDelegte.indexPathDelegate; appDelegte.indexPathDelegate = indexPath; UITableViewCell *prevSelectedCell = [tableView cellForRowAtIndexPath: indexpath1]; if([prevSelectedCell isSelected]){ [prevSelectedCell setSelected:NO]; } }

Funcionó para mí

Estoy trabajando en un proyecto en el que tengo que preseleccionar una celda en particular.

Puedo preseleccionar una celda usando -willDisplayCell , pero no puedo anular la selección cuando el usuario hace clic en 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?


Además de configurar la celda como seleccionada, también debe informar al TableView que la celda está seleccionada. Agregue una llamada a -tableView:selectRowAtIndexPath:animated:scrollPosition: a su método willDisplayCell: : y podrá anular su selección como normal.

- (void)tableView:(UITableView*)tableView willDisplayCell:(UITableViewCell*)cell forRowAtIndexPath:(NSIndexPath*)indexPath { AppDelegate_iPad *appDelegte = (AppDelegate_iPad *)[[UIApplication sharedApplication] delegate]; if ([appDelegte.indexPathDelegate row] == [indexPath row]) { // SELECT CELL [cell setSelected:YES]; // TELL TABLEVIEW THAT ROW IS SELECTED [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; } }

Asegúrese de usar UITableViewScrollPositionNone para evitar el comportamiento de desplazamiento extraño.


Basado en la solución de saikirans, escribí esto, lo cual me ayudó. En el archivo .m:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if(selectedRowIndex && indexPath.row == selectedRowIndex.row) { [tableView deselectRowAtIndexPath:indexPath animated:YES]; selectedRowIndex = nil; } else { self.selectedRowIndex = [indexPath retain]; } [tableView beginUpdates]; [tableView endUpdates]; }

Y en el archivo de encabezado:

@property (retain, nonatomic) NSIndexPath* selectedRowIndex;

Tampoco tengo mucha experiencia, así que revise si hay fugas de memoria, etc.


Esto debería funcionar:

[tableView deselectRowAtIndexPath:indexpath1 animated:NO];

Solo asegúrese de que materialTable y tableView apuntan al mismo objeto.

¿Los materiales están conectados a tableView en Interface Builder?


Para que la anulación de la selección (DidDeselectRowAt) se active cuando se hace clic la primera vez debido a datos precargados; necesita informar al TableView que la fila ya está seleccionada para comenzar, de modo que un clic inicial luego deselecciona la fila:

// Swift 3:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { if tableView[indexPath.row] == "data value" tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableViewScrollPosition.none) } }


Prueba esto:

for (NSIndexPath *indexPath in tableView.indexPathsForSelectedRows) { [tableView deselectRowAtIndexPath:indexPath animated:NO]; }


Puede ser útil hacer una extensión en Swift para esto.

Swift 4:

Extensión Swift (por ejemplo, en un archivo UITableViewExtension.swift):

import UIKit extension UITableView { func deselectSelectedRow(animated: Bool) { if let indexPathForSelectedRow = self.indexPathForSelectedRow { self.deselectRow(at: indexPathForSelectedRow, animated: animated) } } }

Use por ejemplo:

override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.tableView.deselectSelectedRow(animated: true) }


Rápido

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { // your code // your code // and use deselect row to end line of this function self.tableView.deselectRowAtIndexPath(indexPath, animated: true) }


Si desea seleccionar cualquier celda de la tabla con el primer clic y anular la selección con la segunda, debe usar este código:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (self.selectedIndexPath && [indexPath compare:self.selectedIndexPath] == NSOrderedSame) { [tableView deselectRowAtIndexPath:indexPath animated:YES]; self.selectedIndexPath = nil; } else { self.selectedIndexPath = indexPath; } }


Swift 2.0:

tableView.deselectRowAtIndexPath(indexPath, animated: true)


Swift 3

Me he encontrado con esto también: cuando navegas o vuelves a la vista de tabla, generalmente no anula la selección de la fila seleccionada previamente para ti. Pongo este código en el controlador de vista de tabla y funciona bien:

override func viewDidAppear(_ animated: Bool) { if let lastSelectedRow = tableView.indexPathForSelectedRow { tableView.deselectRow(at: lastSelectedRow, animated: true) } }


Swift 4:

func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? { let cell = tableView.cellForRow(at: indexPath) if cell?.isSelected == true { // check if cell has been previously selected tableView.deselectRow(at: indexPath, animated: true) return nil } else { return indexPath } }


Swift 4:

tableView.deselectRow(at: indexPath, animated: true)


Utilice el siguiente método en la vista de mesa delegado''sSelectRowAtIndexpath (O desde cualquier lugar)

[myTable deselectRowAtIndexPath:[myTable indexPathForSelectedRow] animated:YES];


Verifique con el método delegado si es correcto o no. Por ejemplo;

-(void) tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath

para

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath


prueba esto

[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];


usa este código

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { //Change the selected background view of the cell. [tableView deselectRowAtIndexPath:indexPath animated:YES]; }

Swift 3.0:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { //Change the selected background view of the cell. tableView.deselectRow(at: indexPath, animated: true) }


Swift 3.0:

Siguiendo la sección de conformidad del protocolo de la guía de estilo veloz de Ray Wenderlich , para mantener los métodos relacionados agrupados, coloque esta extensión debajo de su clase de controlador de vista así:

// your view controller class MyViewcontroller: UIViewController { // class stuff here } // MARK: - UITableViewDelegate extension MyViewcontroller: UITableViewDelegate { // use the UITableViewDelegate method tableView(_:didSelectRowAt:) func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // your code when user select row at indexPath // at the end use deselectRow tableView.deselectRow(at: indexPath, animated: true) } }


Swift 3/4

En ViewController:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) }

En la celda personalizada:

override func awakeFromNib() { super.awakeFromNib() selectionStyle = .none }


rápido 3.0

tableView.deselectRow(at: indexPath, animated: true)


NSIndexPath * index = [self.menuTableView indexPathForSelectedRow]; [self.menuTableView deselectRowAtIndexPath:index animated:NO];

coloque este código de acuerdo con su código y obtendrá su celda deseleccionada.


func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) }