Ich folgte dem Vorschlag von Luke Redpath hier - Ausgewählte UItableViewCell-Option, die bei Auswahl blau bleibt -, um die Auswahl der Zeile bei der Rückkehr zur ursprünglichen Tabellenansicht aufzuheben, ich kann sie jedoch nicht aktivieren. Tatsächlich wird die Methode nicht ausgelöst.
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
}
Ich vermute, das liegt daran, dass die Klasse keine UITableViewController
ist, sondern eine UIViewController
mit der tableView
als Eigenschaft, die mit der NIB verbunden ist.
Wie würde ich dasselbe Verhalten bekommen - dh bei der Rückkehr die Auswahl aufheben?
warum Sie die Auswahl in der Delegat-Methode einfach nicht aufheben
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
}
Wenn Sie einen NavigationController verwenden, können Sie dies mit seinem Delegierten tun:
- (void)navigationController: (UINavigationController *)navigationController
didShowViewController: (UIViewController *)viewController
animated: (BOOL)animated
{
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
}
Sie müssen aber prüfen, ob der Show Controller derjenige ist, den Sie wollen = /
[EDIT] Erstellen Sie die Steckdose und verknüpfen Sie sie in IB mit dem 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
Wählst du die Zeile programmgesteuert aus? Wenn ja, hatte ich das gleiche Problem, als ich eine Zeile mit [cellToBeSelected setSelected:YES];
auswählte.
Mit der selectRowAtIndexPath:animated:scrollPosition:
-Methode von UITableViewController
wurde der aktuell ausgewählte indexPath verfolgt.
Wenn clearsSelectionOnViewWillAppear
auf true gesetzt ist, werden Zeilen manuell nicht abgewählt.
Ich hatte das gleiche Problem, aber nach dem Debuggen stellte ich fest, dass der indexPathForSelectedRow-Zähler 0 war. Ich überprüfte meinen Code und bemerkte, dass ich anrief
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// some code...
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
Nach dem Löschen dieser Zeile funktionierte es wie erwartet.
Sehr einfach: Versuchen Sie diese Zeile.
Fügen Sie deselectRowAtIndexPath
in Ihre didSelectRowAtIndexPath
ein.
- (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.
}
Die Auswahl der Zeile wird aufgehoben, nachdem Sie darauf geklickt haben.
-(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]];
}