kif-framework/KIF

View on GitHub
Test Host/PickerController.m

Summary

Maintainability
Test Coverage

@interface PickerController : UIViewController<UIPickerViewDataSource, UIPickerViewDelegate, UIPickerViewAccessibilityDelegate>

@property (weak, nonatomic, readonly) IBOutlet UITextField *wheelDateSelectionTextField;
@property (weak, nonatomic, readonly) IBOutlet UITextField *wheelDateTimeSelectionTextField;
@property (weak, nonatomic, readonly) IBOutlet UITextField *wheelTimeZoneDateTimeSelectionTextField;
@property (weak, nonatomic, readonly) IBOutlet UITextField *wheelLimitedDateTimeSelectionTextField;
@property (weak, nonatomic, readonly) IBOutlet UITextField *wheelTimeSelectionTextField;
@property (weak, nonatomic, readonly) IBOutlet UITextField *countdownSelectionTextField;
@property (weak, nonatomic) IBOutlet UITextField *datePickerCalendarTextField;
@property (weak, nonatomic) IBOutlet UITextField *dateTimePickerCalendarTextField;
@property (strong, nonatomic) UIDatePicker *wheelDatePicker;
@property (strong, nonatomic) UIDatePicker *wheelDateTimePicker;
@property (strong, nonatomic) UIDatePicker *wheelTimeZoneDateTimePicker;
@property (strong, nonatomic) UIDatePicker *wheelLimitedDateTimePicker;
@property (strong, nonatomic) UIDatePicker *wheelTimePicker;
@property (strong, nonatomic) UIDatePicker *countdownPicker;
@property (strong, nonatomic) UIDatePicker *dateCalendarPicker;
@property (strong, nonatomic) UIDatePicker *dateTimeCalendarPicker;
@property (strong, nonatomic) IBOutlet UIPickerView *phoneticPickerView;

@end

@implementation PickerController

@synthesize wheelDatePicker;
@synthesize wheelDateTimePicker;
@synthesize wheelTimeZoneDateTimePicker;
@synthesize wheelLimitedDateTimePicker;
@synthesize countdownPicker;
@synthesize wheelTimePicker;
@synthesize wheelDateSelectionTextField;
@synthesize wheelDateTimeSelectionTextField;
@synthesize wheelTimeZoneDateTimeSelectionTextField;
@synthesize wheelLimitedDateTimeSelectionTextField;
@synthesize wheelTimeSelectionTextField;
@synthesize countdownSelectionTextField;
@synthesize phoneticPickerView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    wheelDatePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(30, 215, 260, 35)];
    wheelDatePicker.datePickerMode = UIDatePickerModeDate;
    
#if __IPHONE_13_4
    if(@available(iOS 13.4, *)) {
        wheelDatePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
    }
#endif
    wheelDatePicker.hidden = NO;
    [wheelDatePicker addTarget:self action:@selector(datePickerChanged:)
              forControlEvents:UIControlEventValueChanged];
    [wheelDatePicker setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];

    wheelDateSelectionTextField.placeholder = NSLocalizedString(@"Date Selection", nil);
    wheelDateSelectionTextField.returnKeyType = UIReturnKeyDone;
    wheelDateSelectionTextField.inputView = wheelDatePicker;
    wheelDateSelectionTextField.accessibilityLabel = @"Date Selection";

    wheelDateTimePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(30, 215, 260, 35)];
#if __IPHONE_13_4
    if(@available(iOS 13.4, *)) {
        wheelDateTimePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
    }
#endif
    wheelDateTimePicker.datePickerMode = UIDatePickerModeDateAndTime;
    [wheelDateTimePicker addTarget:self action:@selector(dateTimePickerChanged:)
         forControlEvents:UIControlEventValueChanged];
    [wheelDateTimePicker setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];

    wheelDateTimeSelectionTextField.placeholder = NSLocalizedString(@"Date Time Selection", nil);
    wheelDateTimeSelectionTextField.returnKeyType = UIReturnKeyDone;
    wheelDateTimeSelectionTextField.inputView = wheelDateTimePicker;
    wheelDateTimeSelectionTextField.accessibilityLabel = @"Date Time Selection";
    
    wheelTimeZoneDateTimePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(30, 215, 260, 35)];
    wheelTimeZoneDateTimePicker.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
#if __IPHONE_13_4
    if(@available(iOS 13.4, *)) {
        wheelTimeZoneDateTimePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
    }
#endif
    wheelTimeZoneDateTimePicker.datePickerMode = UIDatePickerModeDateAndTime;
    [wheelTimeZoneDateTimePicker addTarget:self action:@selector(timeZoneDateTimePickerChanged:)
                  forControlEvents:UIControlEventValueChanged];
    [wheelTimeZoneDateTimePicker setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
    
    wheelTimeZoneDateTimeSelectionTextField.placeholder = NSLocalizedString(@"Time Zone Date Time Selection", nil);
    wheelTimeZoneDateTimeSelectionTextField.returnKeyType = UIReturnKeyDone;
    wheelTimeZoneDateTimeSelectionTextField.inputView = wheelTimeZoneDateTimePicker;
    wheelTimeZoneDateTimeSelectionTextField.accessibilityLabel = @"Time Zone Date Time Selection";

    wheelLimitedDateTimePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(30, 215, 260, 35)];
#if __IPHONE_13_4
    if(@available(iOS 13.4, *)) {
        wheelLimitedDateTimePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
    }
#endif
    wheelLimitedDateTimePicker.datePickerMode = UIDatePickerModeDateAndTime;
    wheelLimitedDateTimePicker.minimumDate = [NSDate dateWithTimeInterval:-31622400 /*Year+1day*/ sinceDate:[NSDate date]];
    wheelLimitedDateTimePicker.maximumDate = [NSDate dateWithTimeInterval: 31622400 /*Year+1day*/ sinceDate:[NSDate date]];
    [wheelLimitedDateTimePicker addTarget:self action:@selector(limitedDateTimePickerChanged:)
             forControlEvents:UIControlEventValueChanged];
    [wheelLimitedDateTimePicker setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];

    wheelLimitedDateTimeSelectionTextField.placeholder = NSLocalizedString(@"Limited Date Time Selection", nil);
    wheelLimitedDateTimeSelectionTextField.returnKeyType = UIReturnKeyDone;
    wheelLimitedDateTimeSelectionTextField.inputView = wheelLimitedDateTimePicker;
    wheelLimitedDateTimeSelectionTextField.accessibilityLabel = @"Limited Date Time Selection";
    
    wheelTimePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(30, 215, 260, 35)];
#if __IPHONE_13_4
    if(@available(iOS 13.4, *)) {
        wheelTimePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
    }
#endif
    wheelTimePicker.datePickerMode = UIDatePickerModeTime;
    [wheelTimePicker addTarget:self action:@selector(timePickerChanged:)
             forControlEvents:UIControlEventValueChanged];
    [wheelTimePicker setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];

    wheelTimeSelectionTextField.placeholder = NSLocalizedString(@"Time Selection", nil);
    wheelTimeSelectionTextField.returnKeyType = UIReturnKeyDone;
    wheelTimeSelectionTextField.inputView = wheelTimePicker;
    wheelTimeSelectionTextField.accessibilityLabel = @"Time Selection";

    countdownPicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(30, 215, 260, 35)];
    countdownPicker.datePickerMode = UIDatePickerModeCountDownTimer;
    [countdownPicker addTarget:self action:@selector(countdownPickerChanged:)
         forControlEvents:UIControlEventValueChanged];
    [countdownPicker setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];

    countdownSelectionTextField.placeholder = NSLocalizedString(@"Countdown Selection", nil);
    countdownSelectionTextField.returnKeyType = UIReturnKeyDone;
    countdownSelectionTextField.inputView = countdownPicker;
    countdownSelectionTextField.accessibilityLabel = @"Countdown Selection";
    
    self.dateCalendarPicker = [[UIDatePicker alloc] init];
    self.dateCalendarPicker.datePickerMode = UIDatePickerModeDate;
    [self.dateCalendarPicker addTarget:self action:@selector(dateCalendarPickerChanged:) forControlEvents:UIControlEventValueChanged];
    [self.dateCalendarPicker setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
    
#if __IPHONE_13_4
    if(@available(iOS 13.4, *)) {
        self.dateCalendarPicker.preferredDatePickerStyle = UIDatePickerStyleCompact;
    }
#endif
    
    self.datePickerCalendarTextField.placeholder = NSLocalizedString(@"Date Calendar Selection", nil);
    self.datePickerCalendarTextField.returnKeyType = UIReturnKeyDone;
    self.datePickerCalendarTextField.inputView = self.dateCalendarPicker;
    self.datePickerCalendarTextField.accessibilityLabel = @"Date Calendar Selection";
    
    self.dateTimeCalendarPicker = [[UIDatePicker alloc] init];
    self.dateTimeCalendarPicker.datePickerMode = UIDatePickerModeDateAndTime;
    [self.dateTimeCalendarPicker addTarget:self action:@selector(dateTimeCalendarPickerChanged:) forControlEvents:UIControlEventValueChanged];
    [self.dateTimeCalendarPicker setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
    
#if __IPHONE_13_4
    if(@available(iOS 13.4, *)) {
        self.dateTimeCalendarPicker.preferredDatePickerStyle = UIDatePickerStyleCompact;
    }
#endif
    
    self.dateTimePickerCalendarTextField.placeholder = NSLocalizedString(@"Date Time Calendar Selection", nil);
    self.dateTimePickerCalendarTextField.returnKeyType = UIReturnKeyDone;
    self.dateTimePickerCalendarTextField.inputView = self.dateTimeCalendarPicker;
    self.dateTimePickerCalendarTextField.accessibilityLabel = @"Date Time Calendar Selection";
}

- (NSDateFormatter *)dateFormatter
{
    static NSDateFormatter *dateFormatter;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        dateFormatter = [[NSDateFormatter alloc] init];
        dateFormatter.dateStyle = NSDateFormatterMediumStyle;
    });
    
    return dateFormatter;
}

- (void)datePickerChanged:(UIDatePicker *)picker {
    self.wheelDateSelectionTextField.text = [self.dateFormatter stringFromDate:picker.date];
}

- (NSDateFormatter *)dateTimeFormatter
{
    static NSDateFormatter *dateTimeFormatter;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        dateTimeFormatter = [[NSDateFormatter alloc] init];
        [dateTimeFormatter setDateFormat:@"MMM d, hh:mm aa"];
    });
    
    return dateTimeFormatter;
}

- (void)dateTimePickerChanged:(UIDatePicker *)picker
{
    self.wheelDateTimeSelectionTextField.text = [self.dateTimeFormatter stringFromDate:picker.date];
}

- (void)limitedDateTimePickerChanged:(UIDatePicker *)picker
{
    self.wheelLimitedDateTimeSelectionTextField.text = [self.dateTimeFormatter stringFromDate:picker.date];
}

- (NSDateFormatter *)timeZoneDateTimeFormatter
{
    static NSDateFormatter *dateTimeFormatter;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        dateTimeFormatter = [[NSDateFormatter alloc] init];
        dateTimeFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
        [dateTimeFormatter setDateFormat:@"MMM d, hh:mm aa Z"];
    });
    
    return dateTimeFormatter;
}

- (void)timeZoneDateTimePickerChanged:(UIDatePicker *)picker
{
    self.wheelTimeZoneDateTimeSelectionTextField.text = [self.timeZoneDateTimeFormatter stringFromDate:picker.date];
}

- (NSDateFormatter *)timeFormatter
{
    static NSDateFormatter *timeFormatter;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        timeFormatter = [[NSDateFormatter alloc] init];
        [timeFormatter setDateFormat:@"h:mm a"];
    });
    
    return timeFormatter;
}

- (void)timePickerChanged:(UIDatePicker *)picker
{
    self.wheelTimeSelectionTextField.text = [self.timeFormatter stringFromDate:picker.date];
}

- (void)countdownPickerChanged:(UIDatePicker *)picker
{
    self.countdownSelectionTextField.text = [NSString stringWithFormat:@"%f", picker.countDownDuration];
}

- (void)dateCalendarPickerChanged:(UIDatePicker *)picker
{
    self.datePickerCalendarTextField.text = [self.dateFormatter stringFromDate:picker.date];
}

- (void)dateTimeCalendarPickerChanged:(UIDatePicker *)picker
{
    self.dateTimePickerCalendarTextField.text = [self.dateFormatter stringFromDate:picker.date];
}


- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return 14;
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [ @[@"Alpha", @"Bravo", @"Charlie", @"Delta", @"Echo", @"Foxtrot", @"Golf", @"Hotel", @"India", @"Juliet", @"Kilo", @"Lima", @"Mike", @"N8117U"] objectAtIndex:row];
}

- (NSString *)pickerView:(UIPickerView *)pickerView accessibilityLabelForComponent:(NSInteger)component
{
    return @"Call Sign";
}

@end