I'm working on an iOS app which has 3 text fields and a UIDatePicker.
When I select a time in the DatePicker I'm supposed to display it over the TextField but I can't get it to work.
Here are my files:
Login.h
#import <UIKit/UIKit.h>
@interface Login : UIViewController<UIPickerViewDelegate>
{
}
@property (weak) IBOutlet UILabel * label;
@property (weak) IBOutlet UITextField * username;
@property (weak) IBOutlet UITextField * password;
@property (weak) IBOutlet UITextField * birth;
@property (weak) IBOutlet UIButton * entrar;
@property (weak) IBOutlet UIDatePicker * data;
@property (strong, nonatomic) NSDate *dateOfBirth;
@property (strong, nonatomic) NSDateFormatter * dateFormatter;
@property (strong, nonatomic) NSString * etiqueta;
@property (strong, nonatomic) NSString * eti;
@property (strong, nonatomic) NSString * dates;
-(id) initWithBirth: (NSDate *) dateOfBirth;
-(IBAction) displayDate: (id) sender;
@end
Login.m
#import "Login.h"
@interface Login()
@end
@implementation Login
-(void) viewdDidLoad{
[super viewDidLoad];
_eti=@"";
self.label.text=self.eti;
_etiqueta = @"Introdueix el teu nom d'usuari, la contrasenya, i la teva data de naixement";
self.label.text = self.etiqueta;
self.data = [[UIDatePicker alloc] init];
[_data setDate:[NSDate date]];
[self.data addTarget:self action:@selector(updateTextField:) forControlEvents:UIControlEventValueChanged];
[self.birth setInputView:_data];
self.data.datePickerMode = UIDatePickerModeDate;
self.data.hidden = NO;
self.data.date = [NSDate date];
self.dateFormatter = [[NSDateFormatter alloc] init];
self.dateFormatter.dateStyle = NSDateFormatterLongStyle;
[self.view addSubview:self.data];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap];
NSDate * now = [NSDate date];
[_data setDate:now animated:YES];
_birth.text = [now description];
[self.dateFormatter stringFromDate: _dateOfBirth];
}
-(void)datePickerDidChangeDate:(id)sender
{
NSLog(@"%@",self.data.date);
self.birth.text=[NSString stringWithFormat:@"%@",self.data.date.description];
}
-(NSString *)formatDate:(NSDate *) date
{
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle: NSDateFormatterShortStyle];
[dateFormatter setDateFormat:@"MM'/'dd'/'yyyy"];
NSString * formattedDate = [dateFormatter stringFromDate: date];
return formattedDate;
//NSDate *yesterdaydate=[NSDate dateWithTimeIntervalSinceNow:obj];
}
-(void)dismissKeyboard {
[_username resignFirstResponder];
[_password resignFirstResponder];
[_birth resignFirstResponder];
}
-(id) initWithBirth:(NSDate *)dateOfBirth
{
if (self = [super init]){
_dateOfBirth = dateOfBirth;
}
return self;
}
-(IBAction) displayDate:(id)sender{
NSDate * selected = [_data date];
NSString * dates = [selected description];
_birth.text = dates;
}
-(IBAction) selector:(id)sender
{
if (_username.text.length == 0 || _password.text.length == 0 || _birth.text.length == 0)
{
[[[UIAlertView alloc] initWithTitle:@"Alerta!"
message:@"Algun camp està buit!"
delegate: nil
cancelButtonTitle:@"Cancelar"
otherButtonTitles:nil
] show];
}
else{
[self performSegueWithIdentifier: @"Menu" sender:self];
}
}
@end
Can anyone help me figure out how I can solve this problem?
EDIT: also, I'd like to know how can I program an "if" method that checks that the inputted date isn't before today's, i.e., that you've inputted May the 9th and not May the 8th.
Something like "if date < today".
Thank you very much.