Рассмотрим, как ограничить действия пользователя, которые могут привести к некорректной работе программы.
self.buttonSave.userInteractionEnabled = NO;
Сделаем проверку на то введено ли описание события.
Сделаем проверку на ввод даты.
И последний штрих, добавим запуск валидации при тапе по фону приложения.
Возможно вас ещё заинтересует пост Валидация данных в Core Data.
- (BOOL)textFieldShouldReturn:(UITextField *)textField { if ([textField isEqual:self.textField]) { if (textField.text.length != 0) { [textField resignFirstResponder]; // свернуть текстовое поле self.buttonSave.userInteractionEnabled = YES; return YES; } else { [self showAlertWithMessage:@"Для сохранения события введите значение в текстовое поле"]; } } return NO; } - (void)showAlertWithMessage:(NSString *)message { UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Внимание!" message:message preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * __nonnull action) {}]; [alert addAction:ok]; [self presentViewController:alert animated:YES completion:nil]; }
Сделаем проверку на ввод даты.
- (void)save { if (self.eventDate) { if ([self.eventDate compare:[NSDate date]] == NSOrderedSame) { [self showAlertWithMessage:@"Дата будущего события не может совпадать с текущей датой"]; } else if ([self.eventDate compare:[NSDate date]] == NSOrderedAscending) { [self showAlertWithMessage:@"Дата будущего события не может быть ранее текущей даты"]; } else { [self setNotification]; } } else { [self showAlertWithMessage:@"Для сохранения события измените значение даты на более позднее"]; } } - (void)setNotification { NSString *eventInfo = self.textField.text; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"HH:mm dd.MMMM.yyyy"]; NSString *eventDate = [formatter stringFromDate:self.eventDate]; NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:eventInfo, @"eventInfo", eventDate, @"eventDate", nil]; UILocalNotification *notification = [[UILocalNotification alloc] init]; notification.userInfo = dict; notification.timeZone = [NSTimeZone defaultTimeZone]; notification.fireDate = self.eventDate; notification.alertBody = eventInfo; notification.applicationIconBadgeNumber = 1; notification.soundName = UILocalNotificationDefaultSoundName; [[UIApplication sharedApplication] scheduleLocalNotification:notification]; }
И последний штрих, добавим запуск валидации при тапе по фону приложения.
- (void)handleEndEditing { if (self.textField.text.length != 0) { [self.view endEditing:YES]; self.buttonSave.userInteractionEnabled = YES; } else { [self showAlertWithMessage:@"Для сохранения события введите значение в текстовое поле"]; } }
Возможно вас ещё заинтересует пост Валидация данных в Core Data.