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?
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];
}
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
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.
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.
Très simple: Essayez cette ligne.
Ajoutez deselectRowAtIndexPath
dans votre didSelectRowAtIndexPath
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
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.
-(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]];
}