UILabel> Показать текст (запись сохранена) на секунду, затем очистить UILabel не работает - PullRequest
0 голосов
/ 31 марта 2012

Я работаю над приложением базы данных контактов.Пользователь может ввести имя, телефон, электронную почту в UITextFields и сохранить данные в базу данных SQLite.Все работает, как и ожидалось, но я хотел бы показать пользователю подтверждение, когда данные были успешно сохранены.Реализована метка состояния, показывающая «Сохранено», когда запись была сохранена в БД, но мне нравится, что текст исчезает через секунду.

Надеюсь, вы можете помочь, я пытался реализовать функцию sleep() сразу после self.statusLabel.text = @"Saved";но это не сработало.С кодом ниже я получаю метку состояния с надписью «Сохранено», но она должна исчезнуть автоматически через секунду.

- (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);
    }
}

Ответы [ 4 ]

1 голос
/ 31 марта 2012
- (void)clearLabel {
    self.statusLabel.text = @"";
}

- (IBAction)saveButtonTapped:(id)sender {
    //...
    self.statusLabel.text = @"Saved";
    [self performSelector:@selector(clearLabel) withObject:nil afterDelay:1.0];
    //...
}
1 голос
/ 31 марта 2012

Вы можете использовать Grand Central Dispatch для выполнения действия, такого как удаление текста метки, после определенной задержки.Например,

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 = @"";
});
1 голос
/ 31 марта 2012

Попробуйте использовать

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

В противном случае вы можете рассмотреть вариант реализации NSTimer, который срабатывает через секунду и очищает этикетку.

0 голосов
/ 31 марта 2012

Если вы хотите простой в использовании вид, то вы можете использовать следующие, так же, как Android делает

https://github.com/alexleutgoeb/ALToastView

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...