2013-12-15 4 views
0


Я разрабатываю для ИОС, и я нахожусь в создании из UITextField, содержащего UIDatePicker как его inputView. Моя проблема заключается в следующем: я установил минимальное время до настоящего времени ->[NSDate date], и это потому, что я не хочу, чтобы пользователь вводил время до now.
Это прекрасно работает, но если пользователь остается в ViewController, когда время проходит в телефоне, я получаю неправильное время (за 1 минуту до now).
Есть ли способ слушать аппаратные часы и синхронизировать их с часами телефона? как послушать уведомление iPhone (надеюсь) для изменения минуты?
Я не хочу, чтобы пользователь видел неправильное время, я хочу, чтобы текстовое поле менялось, если время прошло.

Я думал о реализации, и я хотел бы услышать другую точку зрения, так как у меня это совсем непросто ...
Моя реализация:
1. бег с задержкой НОД асинхронной за секундами, оставленными в текущем минуты, и когда это достигает, слушайте каждые 60 секунд ... но это не похоже на правильную идею, так как если пользователь покинет ViewController, я могу получить утечку или пользователь помещает приложение в фоновом режиме, это будет замораживаться и продолжаться с неправильного места (согласно документации GCD).
Любое предложение будет очень оценено.UIDatePicker с минимальным временем

+0

Что это за? Если дата в прошлом, вы можете просто перейти на текущую дату, когда пользователь запускает? – Wain

+0

Я хочу, чтобы текстовое поле сохранялось в синхронизации, если текущее время после установленного времени – user2558461

ответ

0

Вместо использования GDC, сделайте аналогичный подход, но с NSTimer. invalidate таймер, когда вид скрыт (viewDidDisappear:), и наблюдайте за уведомлениями приложений для перехода на задний план и возврата на передний план для сброса таймера.


Вам нужно вычислить конец следующей минуты, это становится первой датой пожара (fireDate). Как только вы что:

NSTimer *timer = [[NSTimer alloc] initWithFireDate:fireDate interval:60 target:self selector:@selectior(...) userInfo:nil repeats:YES]; 
[[NSRunLoop currentRunLoop] addTimer:timer forMode: NSDefaultRunLoopMode]; 
+0

Я вижу, что вы имеете в виду, никогда не использовал 'NSTimer' раньше, не могли бы вы показать, как инициализировать его для вызова, когда минута проходит? учитывая, что это может быть даже сейчас? и повторение только после? – user2558461

+0

Добавлен еще один, вы сможете рассчитать дату огня (подсказка: 'NSDateComponents'). – Wain

0

Настройте дату выбор за добытчиком или способом его собственного, и сделать что-то вроде этого, в UITextField делегате

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    UIDatePicker *datePicker = self.datePicker; 
    datePicker.minimumDate = [NSDate date]; 
    textField.inputView = datePicker; 

    return YES; 
} 
+0

Вы меня не совсем поняли, я бы хотел, чтобы uitextfield обновлялось по прошествии времени, поэтому пользователь получит правильное значение, даже если он не нажимает на uitextfield – user2558461

+0

Ah ok. Ну, вы можете настроить таймер, который обновляет UIDatePicker напрямую, если вы оставите указатель для него где-нибудь, но я бы подумал о том, хотите ли вы на самом деле сделать это. –

+0

Я бы не рекомендовал постоянно обновлять представление, которое пользователь должен сам манипулировать. Пусть они выбирают и проверяют, что они выбрали, потом. –

Смежные вопросы