2

我在我的 IOS 应用程序中添加了一个 UIDatePicker,默认情况下会加载它并选择今天的日期。

我正在收听选定的事件以更新我的字段,但由于今天已经选择了我今天从来没有得到它是我想要选择的日期(因为它已经被选中)。我需要将至少一列更改为不同的,然后在第二步中选择返回今天的日期。

无论如何要在没有选定日期的情况下显示日期选择器,或者以某种方式收听选择器上的选项卡而不是选择?不想在工具栏中添加“今天”按钮来添加任何外部控件来解决此问题,或者从预先选择的不同日期开始,因为它与预先选择的日期相同。

谢谢

4

3 回答 3

3

我不能 100% 确定您是否正在寻找这个。但这对我来说很好。

在 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; 
 }

将该方法连接到日期选择器的值更改事件并包括UITextFieldDelegate

加载视图时,

页面加载时

当日期选择器滚动时

滚动日期选择器时

于 2013-02-14T13:42:02.823 回答
0

苹果没有为此实施任何通知。原因是用户将点击、旋转和更改日期选择器,直到找到他们想要的日期。然后他们会点击某种完成或下一步按钮。您不希望用户尝试选择日期并且选择器继续解雇。如果您真的想实现这一点,那么您可以继承UIDatePicker或捕获您想要的部分的触摸。

于 2013-02-13T19:58:04.253 回答
0

尝试继承 UIDatePicker,并覆盖 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];
}

我相信它可以改进,但作为一个起点,它可能会对你有所帮助。

于 2014-03-31T14:33:58.417 回答