web-dev-qa-db-fra.com

Désélectionner la ligne de la vue table lors du retour

J'ai suivi la suggestion de Luke Redpath ici - UItableViewCell sélectionné restant bleu lors de la sélection - pour désélectionner la ligne lors du retour à la vue de table d'origine, mais je ne parviens pas à la faire fonctionner. En fait, la méthode ne se déclenche pas.

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

Je suppose que cela est dû au fait que la classe n'est pas une UITableViewController, mais une UIViewController avec la tableView en tant que propriété connectée à la carte NIB.

Comment aurais-je le même comportement - par exemple, désélectionner lors du retour?

32
cannyboy

pourquoi vous ne le désélectionnez pas dans la méthode déléguée 

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

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

}
21
ahmad

Si vous utilisez un NavigationController, vous pouvez le faire avec son délégué:

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

Mais vous devez vérifier si le contrôleur de show est celui que vous voulez = /

[EDIT] Créez le point de vente et reliez-le à NavigationController dans IB

@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
16
grilix

Est-ce que vous sélectionnez la ligne par programme? Si c'est le cas, j'ai eu le même problème lors de la sélection d'une ligne avec [cellToBeSelected setSelected:YES];.

En utilisant la méthode selectRowAtIndexPath:animated:scrollPosition: de UITableViewController, il a gardé trace du chemin indexPath actuellement sélectionné. 

En fait, si clearsSelectionOnViewWillAppear est défini sur true, les lignes ne sont pas désélectionnées manuellement.

8
Alexander Wallin

J'ai le même problème, mais après le débogage, j'ai découvert que le nombre indexPathForSelectedRow était égal à 0;

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

    // some code...
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

Après avoir supprimé cette ligne, cela a fonctionné comme prévu.

8
FrankWest

Très simple: Essayez cette ligne.

Ajoutez deselectRowAtIndexPath dans votre didSelectRowAtIndexPath

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

}
4
svmrajesh

Swift 3.0

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

Il désélectionnera Row après avoir cliqué dessus.

2
Dhruv Khatri
-(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]];
}
0
Ranjeet Singh