2012-04-05 3 views
1

Ich habe eine benutzerdefinierte UITableView Cell, ich habe eine bestimmte Zelle ausgewählt und geht zu einem anderen ViewController, als ich zurück zum ersten View-Controller kam, ist der ausgewählte Zustand der Zelle nicht sichtbar. Wie werde ich den ausgewählten Zustand einer Zelle nach dem Navigieren von einem anderen ViewControllers unverändert beibehalten?Tabellenansicht Zelle ausgewählten Zustand ändert sich, wenn zu einem anderen Viewcontroller geht?

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [timeSet count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    timeSettingCell *newCell = nil; 
    newCell = [tableView dequeueReusableCellWithIdentifier:identifier]; 
    if(newCell == nil) 
    { 
    NSLog(@"newCell ==================="); 
    NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"timeSettingCell" owner:self options:nil]; 
    newCell = [ nibViews lastObject]; 
    } 
    newCell.timeLabel.text=[timeSet objectAtIndex:indexPath.row]; 

    if (newCell.selected==YES) { 
     newCell.highlighted=YES; 
     newCell.timeImage.image=[UIImage imageNamed:@"radioSelected.png"]; 
    } 
    else { 
     newCell.highlighted=NO; 
     newCell.timeImage.image=[UIImage imageNamed:@"radioNotSelected.png"]; 
    } 
return newCell; 
} 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
value=[[time1 objectAtIndex:indexPath.row]integerValue]; 

SettingsViewController *settings=[[SettingsViewController alloc]initWithNibName:nil bundle:nil andCounterValue:value]; 
[[self presentingViewController] dismissModalViewControllerAnimated:YES]; 
index=indexPath.row; 
[settings release]; 
} 
-(void)viewWillAppear:(BOOL)animated{ 
} 

danke

+0

Wenn Sie quries benötigen, lassen Sie mich wissen .... –

Antwort

1

Ich glaube, Sie Ihr Handy Zustand (ausgewählt oder nicht) unter Verwendung eines NSArray erstellt als Singleton, Ivar oder NSUserDefault und lesen dann seinen Zustand in cellForRowAtIndexPath merken sollte.

EDIT: Beispielcode

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
// Do what you want 

// This save the index of your selected cell on disk 
[[NSUserDefaults standardUserDefaults] setInteger:indexPath.row forKey:@"selectedCell"]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
// Create your cell 

// Here you check if the cell should be selected or not 
if (indexPath.row == [[NSUserDefaults standardUserDefaults] integerForKey:@"selectedCell"]) { 
    newCell.highlighted=YES; 
    newCell.timeImage.image=[UIImage imageNamed:@"radioSelected.png"]; 
} else { 
    newCell.highlighted=NO; 
    newCell.timeImage.image=[UIImage imageNamed:@"radioNotSelected.png"]; 
} 

return aCell; 
} 

NSUserDefaults nützlich ist, Daten auf dem Gerät zu speichern und später wieder abrufen. Das bedeutet, dass Sie Ihren Zellenstatus auch nach dem Schließen und erneuten Öffnen Ihrer App überprüfen können.

Um NSUserDefaults zu verwenden, müssen Sie ein Settings.bundle zu Ihrem Projekt hinzufügen. Werfen Sie einen Blick auf NSUserDefaults Class Reference

+0

:(ein wenig verwirrend, sorry i bin ein Anfänger in Ziel c, können Sie bitte mit Code erklären? –

+0

Werfen Sie einen Blick auf meine EDIT. – Beppe

+0

yah. Jetzt funktioniert es gut, danke für die nützliche Informationen. Ich habe es :) :) –

2

put wie diese, es wird gut funktionieren ...

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

[tableView deselectRowAtIndexPath:indexPath animated:YES]; 
+0

aber dieser Code ist zum Abwählen einer Zeile, was ich brauche, ist der ausgewählte Zustand sollte nicht nach der Navigation von anderen View-Controller ändern. Tanq –

+0

Poping Sie von anderen ViewController zu mainViewController, die Tabellenansicht hat? –

+0

eigentlich habe ich einen tableviewcontroller, der von mainViewController als modalViewController dargestellt wird, um einige Werte auszuwählen. Wenn ich das zweite Mal den Wert auswählen möchte, möchte ich die frühe ausgewählte Zeile anzeigen .. Problem ist jetzt gelöst, aber wenn Sie eine andere Methode haben, bitte sagen Sie mir. –

Verwandte Themen