jmayor
jmayor

Reputation: 2795

Can't Select today's date on uidatepicker ( already pre-selected)

I added a UIDatePicker in my IOS app which get loaded by default with today's date selected.

I'm listening to the selected event to update my field but as today's is already selected I never get it today is the date I want to selec( because it is already selected). I need to change at least one of the column to soemthing different , and in a second step select back today's date.

Anyway to display the datepicker without a selected day or somehow listeng to the tab on the picker instead of the selection ? Wouldn't like to add a Todays button in the toolbar on adding any external control to solve this, or start with a different day pre-selected as it iwll be the same issue with the pre-selected date.

Thanks

Upvotes: 2

Views: 3131

Answers (3)

SomaMan
SomaMan

Reputation: 4164

Try subclassing UIDatePicker, & overriding hitTest:withEvent:

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    // intercept the user touching the initially presented date on a datePicker,
    // as this will normally not send an event.
    // here we check if the user has touched the middle section of the picker,
    // then send the UIControlEventValueChanged action

    CGFloat midY = CGRectGetMidY(self.bounds);
    CGFloat dY = fabs(midY - point.y);

    if (dY < 17.0) // the active section is around 36px high
    {
        NSSet *targets = self.allTargets;
        for (id target in targets)
        {
            NSArray *actions = [self actionsForTarget:target forControlEvent:UIControlEventValueChanged];

            for (NSString *action in actions)
            {
                // suppress the leak warning here as we're not returning anything anyway
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
                [target performSelector:NSSelectorFromString(action) withObject:self];
            }
        }
    }

    return [super hitTest:point withEvent:event];
}

I'm sure it could be improved, but as a starting point it might help you.

Upvotes: 0

Midas
Midas

Reputation: 930

I am not 100% sure whether you are looking for this or not. But this works fine for me.

in the viewcontroller.m

- (void)viewDidLoad
 {
  [super viewDidLoad];
  dp.date = [NSDate date];    //dp is datepicker object
  NSDateFormatter *formDay = [[NSDateFormatter alloc] init];
  [formDay setDateFormat:@"dd/MM/yyy HH:mm"];
  NSString *day = [formDay stringFromDate:[dp date]];
  txt.text = day;
 }


-(IBAction)datepick:(id)sender
 {
  NSDateFormatter *formDay = [[NSDateFormatter alloc] init];
  [formDay setDateFormat:@"dd/MM/yyy HH:mm"];
  NSString *day = [formDay stringFromDate:[dp date]];
  txt.text = day; 
 }

connect the method to value changed event of date picker and include UITextFieldDelegate

when the view is loaded,

When the page is loading

when the date picker is rolled

When datepicker is rolled

Upvotes: 3

Jaybit
Jaybit

Reputation: 1864

Apple did not implement any notifications for this. The reason being is that the user will tap, spin, and change the date picker until they find the date they want. Then they would hit some sort of done or next button. You would not want the user to be trying to select a date and the picker keep dismissing. If you really want to implement this then you can subclass UIDatePicker or and capture touches on the section you want.

Upvotes: 0

Related Questions