【问题标题】:How to disable the UIDatePicker after selecting the date?选择日期后如何禁用 UIDatePicker?
【发布时间】:2011-06-21 09:28:55
【问题描述】:

我正在为 UIDatePicker 使用以下代码,无论我选择它的日期是否显示在标签中。但我需要在选择日期后关闭选择器。这可能吗?请给我建议。

我正在使用以下代码:

- (void)viewDidLoad {
    [super viewDidLoad];

    //Create label
    label = [[UILabel alloc] init]; 
    label.frame = CGRectMake(10, 10, 300, 40);
    label.textAlignment = UITextAlignmentCenter;

    //Use NSDateFormatter to write out the date in a friendly format
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    df.dateStyle = NSDateFormatterMediumStyle;
    label.text = [NSString stringWithFormat:@"%@",
                  [df stringFromDate:[NSDate date]]];
    [df release];
    [self.view addSubview:label]; 
    [label release];

    // Initialization code
    datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 250, 325, 250)];
    datePicker.datePickerMode = UIDatePickerModeDate;
    datePicker.hidden = NO;
    datePicker.date = [NSDate date];
    [datePicker addTarget:self
                   action:@selector(changeDateInLabel:)
         forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:datePicker];
    [datePicker release];
}

- (void)changeDateInLabel:(id)sender{
    //Use NSDateFormatter to write out the date in a friendly format
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    df.dateStyle = NSDateFormatterMediumStyle;
    label.text = [NSString stringWithFormat:@"%@",
                  [df stringFromDate:datePicker.date]];
    [df release];
}   

【问题讨论】:

标签: ios xcode ipad uidatepicker


【解决方案1】:

我建议你这样做:

使用带有完成按钮和取消按钮的工具栏 ...

这只是一个快速的实现,它可能会有所帮助

UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 100, 320, 44)];
textField.text         = @"Date";
[self.view addSubview:textField];

UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
toolbar.barStyle   = UIBarStyleBlackTranslucent;

UIBarButtonItem *itemDone  = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:textField action:@selector(resignFirstResponder)];
UIBarButtonItem *itemSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

toolbar.items = @[itemSpace,itemDone];

UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 320, 216)];
datePicker.minimumDate   = [NSDate date];
datePicker.date          = [NSDate date];
[datePicker addTarget:self action:@selector(didChangePickerDate:) forControlEvents:UIControlEventValueChanged];

textField.inputAccessoryView = toolbar;
textField.inputView          = datePicker;

[textField becomeFirstResponder];

【讨论】:

    【解决方案2】:

    您必须使用按钮单击背景才能从您的视图中隐藏 DATEPICKER。

    -(IBAction)backGroundClick:(id)sender
    {
        [datePicker removeFromSuperview];
    }
    

    【讨论】:

      【解决方案3】:

      也许比从 superview 中删除更好的方法是将 userInteraction 设置为 NO
      并且您需要“完成”按钮,因为用户准备好完成选择日期

      -(IBAction)buttonDoneClick:(id)sender
      {
          [datePicker setUserInteractionEnabled:NO];
      }
      

      【讨论】:

        【解决方案4】:

        以下代码将起作用。 点击日期标签将启用 DatePicker,如下所示:

        - (void)viewDidLoad
        {
            [super viewDidLoad];
        
        
            UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]init];
            tap.numberOfTapsRequired = 1;
        
            label = [[UILabel alloc] init];
            label.frame = CGRectMake(10, 20, 300, 40);
            label.userInteractionEnabled = YES;
            label.textAlignment = NSTextAlignmentCenter;
            label.backgroundColor = [UIColor redColor];
            NSDateFormatter *df = [[NSDateFormatter alloc] init];
            df.dateStyle = NSDateFormatterMediumStyle;
            label.text = [NSString stringWithFormat:@"%@",
                          [df stringFromDate:[NSDate date]]];
            [label addGestureRecognizer:tap];
            [tap addTarget:self action:@selector(datePickerView)];
        
            [self.view addSubview:label];
        
        
        }
        
        - (void)datePickerView
        {
            // Initialization code
            datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 250, 325, 250)];
            datePicker.datePickerMode = UIDatePickerModeDate;
            datePicker.hidden = NO;
            datePicker.date = [NSDate date];
            [self.view addSubview:datePicker];
            [datePicker addTarget:self
                           action:@selector(changeDateInLabel:)
                 forControlEvents:UIControlEventValueChanged];
        }
        
        
        - (void)changeDateInLabel:(id)sender{
            //Use NSDateFormatter to write out the date in a friendly format
            NSDateFormatter *df = [[NSDateFormatter alloc] init];
            df.dateStyle = NSDateFormatterMediumStyle;
            label.text = [NSString stringWithFormat:@"%@",
                          [df stringFromDate:datePicker.date]];
        
        }
        

        并且使用以下方法,Picker 将在点击 Picker 外部时从视图中退出。

        -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
        {
            [datePicker removeFromSuperview];
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多