3 Stimmen

SelectRowAtIndexPath funktioniert nur, wenn allowsMultipleSelection auf YES gesetzt ist.

Ich habe ein UITableViewController, das dynamisch je nach vorheriger Auswahl durch den Benutzer bevölkert wird. In einigen Fällen sollte der Benutzer mehrere Zeilen in der Tabelle auswählen können, in anderen Fällen jedoch nicht. Ich möchte automatisch die erste Zeile in beiden Fällen auswählen, aber ich habe festgestellt, dass dies nur funktioniert, wenn ich allowsMultipleSelection = YES habe.

Der folgende Code wird während -(void)viewDidLoad aufgerufen

switch(self.field)
{
    case people:
       self.options = (NSArray *)[data objectForKey:@"People"];
       self.tableView.allowsMultipleSelection = YES;
       enter code here break;
    case place:
        self.options = (NSArray *)[data objectForKey:@"Places"];
        self.tableView.allowsMultipleSelection = NO;
        break;
    case reason:
        self.options = (NSArray *)[data objectForKey:@"Reasons"];
        self.tableView.allowsMultipleSelection = NO;
        break;
}

[self.tableView reloadData];
NSIndexPath *zeroPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView selectRowAtIndexPath:zeroPath animated:NO scrollPosition:UITableViewScrollPositionNone];

Dies funktioniert korrekt für den Fall "People", aber nicht für die anderen. Ich habe versucht, allowMultipleSelection auf YES zu setzen und das löst das Problem der Auswahl, aber es ist in Bezug auf die Anwendungslogik nicht akzeptabel.

Habe ich etwas über die Funktionsweise dieser Funktionen übersehen? Wie kann ich programmatisch eine Zeile in einer Einzelauswahl-Tabelle auswählen?

9voto

Baruch Punkte 1113

Mit dem folgenden aus der Vorlage behoben:

// Uncomment the following line to preserve selection between presentations.
self.clearsSelectionOnViewWillAppear = NO;

Bin immer noch nicht sicher, warum es vorher nicht funktioniert hat.

2voto

Jody Hagins Punkte 27786
für (NSIndexPath *indexPath in [self.tableView indexPathsForSelectedRows]) {
    [self.tableView deselectRowAtIndexPath:indexPath animated:NO];
}
[self.tableView selectRowAtIndexPath:zeroPath animated:NO scrollPosition:UITableViewScrollPositionNone];

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X