2012-04-09 7 views
1

OK, ich habe wirklich die Themen durchsucht, die dies zu verbergen scheinen, aber ich habe noch immer keine gefunden, die für mich funktionieren. Diese Liste wird erstellt, indem jede UIWebView-Seitenladung hier gesendet wird. An einem Punkt, wenn der Benutzer diese Liste löschen möchte, habe ich eine Schaltfläche, die eine Warnmeldung anzeigt, die nur bestätigt, dass sie löschen möchte, und dann OK zum Löschen drücken. Bitte sag mir, wie ich das machen kann. Etwa auf halbem Weg finden Sie meine clearAllData, die ClearAllRecents Warntaste ist, aber meine leere Funktion darunter ist meine?Löschen oder löschen Sie alle Datenobjekte in UITableView mit Alarmschaltfläche?

#import "RecentViewController.h" 
#import "ViewController.h" 

@interface RecentViewController() 

@end 

@implementation RecentViewController 

@synthesize recent, explorerView; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    recent = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"Recent"] mutableCopy]; 
    [super viewDidLoad]; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
} 

- (IBAction)cancelButtonTapped 
{ 
    [self setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal]; 
    [self.presentingViewController dismissModalViewControllerAnimated:true]; 
} 

- (IBAction)clearAllRecents 
{ 
    UIAlertView *alert = [[UIAlertView alloc] 
         initWithTitle:@"clear all recents?" 
         message:@"press ok to clear" 
         delegate: self 
         cancelButtonTitle:@"cancel" 
         otherButtonTitles:@"ok", nil]; 
    [alert show]; 
} 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if (buttonIndex == 1) { 
     //clear all recent objects?????????????????????????????????????????????? 
    } 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath  *)indexPath 
{ 
    static NSString *cellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyle)UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
    } 

    cell.textLabel.text = [recent objectAtIndex:(recent.count - indexPath.row - 1)]; 
    cell.textLabel.textColor = [UIColor whiteColor];; 
    cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:20.0]; 
    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    explorerView.urlField.text = [recent objectAtIndex:(recent.count - indexPath.row - 1)]; 
    [explorerView textFieldShouldReturn:explorerView.urlField]; 
    [self.presentingViewController dismissModalViewControllerAnimated:true]; 
    explorerView = nil; 
    recent = nil; 
    tableView = nil; 
} 

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     [recent removeObjectAtIndex:indexPath.row]; 
     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationFade]; 
     [[NSUserDefaults standardUserDefaults] setObject:recent forKey:@"Recent"]; 
    } 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

@end 

Antwort

3
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex  { 

if (buttonIndex == 1) { 
    [recent removeAllObjects]; 
    [[NSUserDefaults standardUserDefaults] setObject:recent forKey:@"Recent"]; 
    [yourTableView reloadData]; 
}} 

Das sollte es tun.

+0

Ich habe dies versucht und das Problem, das ich bekomme, ist [yourTableView reloadData]; IhreTableView von grob ist nicht richtig für mich. Ich habe versucht, UITableView und reloadData ist nicht bekannt. Just TableView wirft Fehler auf und schlägt vor, dass ich UITableView verwende. – user1264599

+0

Ich habe nicht erwähnt, dass dies eine UitView in einem UIViewController war. Also habe ich die unbekannte Methode durch Hinzufügen von @property (nonatomic, retain) IBOutlet UITableView * myTableView; zu meinem .h und verbinde es in IB. Jetzt wird die Tabelle gelöscht, aber sobald ich zur Tabellenansicht zurückkehre, wird sie wieder mit allen Daten gefüllt. Was vermisse ich? – user1264599

+0

Ihr Problem ist '- (void) viewDidLoad { recent = [[[[NSUserDefaults standardUserDefaults] arrayForKey: @" Recent "] mutableCopy]; [super viewDidLoad]; } ' Jedes Mal, wenn die Ansicht geladen wird, werden' recent' die Werte aus Ihren Benutzervorgaben zugewiesen. Wenn Sie die Werte dauerhaft löschen möchten, müssen Sie den 'arrayForKey: @" Recent "' zurücksetzen. Andernfalls müssen Sie einen anderen Weg finden, um die Werte zu laden - zum Beispiel, indem Sie dem Benutzer eine Option zum Neuladen von Recents geben. (Siehe bearbeitete Antwort) – AMayes

Verwandte Themen