web-dev-qa-db-de.com

Deaktivieren Sie die Tabellensichtzeile, wenn Sie zurückkehren

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?

32
cannyboy

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];

}
21
ahmad

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

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.

8

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.

8
FrankWest

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];

}
4
svmrajesh

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.

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