Anulando la selección de la tabla de fila en la vista al regresar

He seguido Lucas Redpath la sugerencia de aquí – Seleccionado UItableViewCell permanecer azul cuando se selecciona – para anular la selección de la fila al regresar a la tabla original de la vista, pero no puedo hacerlo funcionar. De hecho, el método no activar.

- (void)viewDidAppear:(BOOL)animated
{
  [super viewDidAppear:animated];
  [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
}

Sospecho que esto es debido a que la clase no es un UITableViewController, pero un UIViewController con el tableView como una propiedad que se conecta a la PUNTA.

¿Cómo hago para conseguir el mismo comportamiento, es decir, anulando la selección cuando regresan?

  • No importa el tiempo como el formato tableview está conectado correctamente. Usted debe ser capaz de ponerlo en didSelectRowAtIndexPath: y que funcione. Usted también puede hacer una rápida NSLog de verificación de lo que [self.tableView indexPathForSelectedRow] devuelve ya que en realidad podría ser devuelve nil.
  • He utilizado este, pero tuve un problema en cambiar las cosas en la celda (fondo, etc) no se refleja inmediatamente. La adición de reloadRowsAtIndexPaths: en didDeselectRowAtIndexPath: ¿el truco
InformationsquelleAutor cannyboy | 2010-10-20

7 Kommentare

  1. 21

    ¿por qué simplemente no reelegirlo en el método delegado

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
    
    [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
    
    }
    • Usted no tiene que hacer [self.tableView indexPathForSelectedRow], indexPath ya es un parámetro, y sólo puede insertar allí.
    • También, si usted está utilizando el método de delegado, debe utilizar el tableView parámetro en lugar de self.tableView, ya que pueden ser diferentes si usted tiene múltiples tableviews.
  2. 16

    Si usted está usando un NavigationController, usted puede hacerlo con su delegado:

    - (void)navigationController: (UINavigationController *)navigationController
           didShowViewController: (UIViewController *)viewController
                        animated: (BOOL)animated
    {
        [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
    }

    Pero usted tiene que comprobar si el controlador de presentación es la que desee =/

    [EDITAR]
    Crear la toma de corriente y el enlace en IB NavigationController

    @interface MyInt <UINavigationControllerDelegate>
    {
        IBOutlet UINavigationController *navigation;
        ...
    }
    @property (nonatomic, retain) UINavigationController *navigation;
    ...
    @end
    
    @implementation MyInt
    @syntesize navigation;
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        [self.navigation setDelegate: self];
    }
    ...
    
    @end
    • Mi nav controlador se crea en mi one, por lo que no tiene su correspondiente clase. ¿Hay forma de evitar esto?
    • Puede asignar a un IBOutlet ivar.
    • Mi configuración es la que tengo un MainViewController clase correspondiente de PUNTA. Que mina ha UITabBarController (también un IBOutlet propiedad ‘tabBarController’ en MainViewController). Dentro de esa pestaña de la barra de varias UINavigation controladores. Estas no son las que se hace referencia en el código. Así que no estoy seguro de cómo acceder a cualquiera de estos controladores de nav
  3. 8

    Estás seleccionando la fila mediante programación? Si es así, yo tenía el mismo problema cuando se selecciona una fila usando [cellToBeSelected setSelected:YES];.

    Mediante el UITableViewController‘s selectRowAtIndexPath:animated:scrollPosition: el método que se siguió la pista de la actual seleccionado indexPath.

    De hecho, si clearsSelectionOnViewWillAppear se establece en true, no se tiene anule la selección de filas manualmente.

  4. 8

    Me hade el mismo problema, pero después de la depuración, yo descubrí el indexPathForSelectedRow conteo de 0 así que he vuelto a revisar mi código y se dio cuenta de que yo estaba llamando

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    
        //some code...
        [tableView deselectRowAtIndexPath:indexPath animated:YES];
    }

    Después de la supresión de esta línea sólo funcionaba como se esperaba.

    • Este fue un completo error evidente que me atrapó. Creo que mucha gente incluido yo mismo poner el desmarque en el delegado de la costumbre.
  5. 4

    Muy simple : Probar la línea.

    Agregar deselectRowAtIndexPath en su didSelectRowAtIndexPath

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        [tableView deselectRowAtIndexPath:indexPath animated:YES];
    
    }
  6. 2

    Swift 3.0

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
                tableView.deselectRow(at: indexPath, animated: true)
        //Write Your Other code Here.
                }

    Se Le anule la selección de la Fila después de que haga clic en Él.

  7. 0
    -(BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return YES;
    }
    
    -(void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath
    {
        [[tableView cellForRowAtIndexPath:indexPath] setBackgroundColor:[UIColor grayColor]];
    }
    
    -(void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath
    {
        [[tableView cellForRowAtIndexPath:indexPath] setBackgroundColor:[UIColor clearColor]];
    }
    • Por favor, describa por qué esta es la solución. ¿Cuál es el cambio/truco?

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea