2012-03-31 10 views
0

Ich arbeite an einer Kontaktdatenbank App. Der Benutzer kann Name, Telefon, E-Mail in UITextFields eingeben und Daten in einer SQLite-Datenbank speichern. Alles funktioniert wie erwartet, aber ich möchte dem Benutzer eine Bestätigung zeigen, wenn die Daten erfolgreich gespeichert wurden. Es wurde eine Statusbeschriftung mit "Gespeichert" implementiert, als der Datensatz in der DB gespeichert wurde, aber ich mag, dass der Text nach einer Sekunde verschwindet.UILabel> Text anzeigen (Datensatz gespeichert) für eine Sekunde, dann löschen UILabel funktioniert nicht

Hoffe, Sie können helfen, ich habe versucht, die sleep() Funktion direkt nach self.statusLabel.text = @"Saved"; zu implementieren, aber es hat nicht funktioniert. Mit dem Code unter erhalte ich die Statusbezeichnung "Saved", aber diese sollte nach einer Sekunde automatisch verschwinden.

- (IBAction)saveButtonTapped:(id)sender 
{ 
    sqlite3_stmt *statement; 

    const char *dbpath = [databasePath UTF8String]; 

    if (sqlite3_open(dbpath, &timings) == SQLITE_OK) 
    { 
     NSString *insertSQL = [NSString stringWithFormat:@"INSERT INTO TIMINGS (time) VALUES (\"%@\")", self.timeLabel.text]; 

     const char *insert_stmt = [insertSQL UTF8String]; 

     sqlite3_prepare_v2(timings, insert_stmt, -1, &statement, NULL); 

     if (sqlite3_step(statement) == SQLITE_DONE) 
     { 
      self.statusLabel.text = @"Saved"; 
      self.timeLabel.text = @"0:00:00"; 

     } 
     else 
     { 
      self.statusLabel.text = @"Failed"; 
     } 
     sqlite3_finalize(statement); 
     sqlite3_close(timings); 
    } 
} 
+1

eine andere Sache, um zu prüfen, ist UIView + (void) animateWithDuration: (NSTimeInterval) Dauer Verzögerung: (NSTimeInterval) Verzögerung Optionen: (UIViewAnimationOptions) Optionen Animationen: (void (^) (void)) Animationen Abschluss: (void (^) (BOOL beendet)) Abschluss. Der Vorteil ist, dass Sie 1.0sec starten und etwas Cooles machen können, so wie der Text verblasst. – danh

+0

Kommen zu Version 2.0 dann :). Danke für den Tipp. –

Antwort

1

Versuchen

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]]; 

Ansonsten verwenden, können Sie eine NSTimer, der ausgelöst wird, nachdem eine zweite Implementierung prüfen und das Etikett reinigen.

+0

Funktioniert gut und ist einfach zu implementieren. Vielen Dank. –

1

im Grand Central Dispatch verwenden könnte, eine Aktion auszuführen, wie das Etikett Text zu entfernen, nachdem ein gewisse Verzögerung. Z.B.

double delayInSeconds = 1.0; 
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
    self.statusLabel.text = @""; 
}); 
+0

Ihr Jungs rockt, danke auch. –

1
- (void)clearLabel { 
    self.statusLabel.text = @""; 
} 

- (IBAction)saveButtonTapped:(id)sender { 
    //... 
    self.statusLabel.text = @"Saved"; 
    [self performSelector:@selector(clearLabel) withObject:nil afterDelay:1.0]; 
    //... 
} 
+0

Ihr Jungs rockt, danke auch. –