当点击按钮时,应该出现日期选择器。

3

你好,我是一名新手,正在学习iPhone/iPad编程。这个程序我将为iPad开发,所以我需要帮助。我的问题是,点击一个按钮后,能否出现日期选择器,并且当选择日期后,我想将其存储在文本字段中。或者,是否最好插入一个日历而不是日期选择器?如果是这样,我该如何添加一个普通的日历并编写代码?

在nib文件中应该做哪些更改?日期会显示在文本字段中吗?难道不应该有一个UITextField吗?

2个回答

13

您需要为按钮创建一个IBAction来调用以显示UIDatePicker。然后实现UIDatePicker委托方法并设置标签的文本。

在您的头文件中:

-(IBAction)showDatePicker:(id)sender;
在你的实现文件中。
 -(IBAction)showDatePicker:(id)sender
    {

    UIDatePicker* picker = [[UIDatePicker alloc] init];
                        picker.autoresizingMask = UIViewAutoresizingFlexibleWidth;
                        picker.datePickerMode = UIDatePickerModeDate;

 [picker addTarget:self action:@selector(dueDateChanged:) forControlEvents:UIControlEventValueChanged];
                        CGSize pickerSize = [picker sizeThatFits:CGSizeZero];
                        picker.frame = CGRectMake(0.0, 250, pickerSize.width, 460);
                        picker.backgroundColor = [UIColor blackColor];
                        [self.view addSubview:picker];
                        [picker release];


    }

-(void) dueDateChanged:(UIDatePicker *)sender {
    NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormatter setDateStyle:NSDateFormatterLongStyle];
    [dateFormatter setTimeStyle:NSDateFormatterNoStyle];

    //self.myLabel.text = [dateFormatter stringFromDate:[dueDatePickerView date]];
    NSLog(@"Picked the date %@", [dateFormatter stringFromDate:[sender date]]);
}

稍后需要时,只需调用 removeFromSuperView 方法将其移除即可。


你能帮我写代码吗?我可以使用普通日历代替日期选择器吗?我想在按下按钮时弹出一个日历/日期选择器。 - raptor85
作为苹果SDK的一部分,没有日历控件。但是有一个很好的免费版本的日历叫做kal http://klazuka.tumblr.com/post/315035813/kal-a-calendar-component-for-the-iphone - cdasher
如果回答解决了你的问题,请记得将其标记为正确答案。我看到你今天加入了SO :) - cdasher
回答很有帮助,但是难道不需要恢复对UIDatePicker对象的引用吗?这样当需要取消时就可以向其发送removeFromSuperView消息。指针可以存储在ivar中,或者可以在UIDatePicker上设置标签,并使用viewWithTag:恢复对对象的引用。 - Obliquely
是的,谢谢您建议使用标签/ viewWithTag:。请注意,我也没有添加添加按钮的代码。 - cdasher
谢谢,我会在Xcode中尝试这个,并告诉你结果。难道不是使用UITextfield来存储日期吗?你能帮我解决一下nib文件的问题吗?因为我有点困惑。你声明了哪些属性? - raptor85

1
In .h file just Create 

UIDatePicker *datePicker;

After that .m file 

// For Date
datePicker = [[UIDatePicker alloc]init];
datePicker.datePickerMode = UIDatePickerModeDate;
[_closingDateTxtFld setInputView:datePicker];
UIToolbar *toolBar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)];
[toolBar setTintColor:[UIColor grayColor]];
UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(ShowSelectedDate)];
UIBarButtonItem *space = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
[toolBar setItems:[NSArray arrayWithObjects:space,doneBtn, nil]];

[_closingDateTxtFld setInputAccessoryView:toolBar];

只需调用此方法

-(void)ShowSelectedDate
{
  NSDateFormatter *formatter=[[NSDateFormatter alloc]init];
  [formatter setDateFormat:@"YYYY-M-dd"];
  if ([_closingDateTxtFld isFirstResponder])
   {
    _closingDateTxtFld.text=[NSString stringWithFormat:@"%@",       [formatter stringFromDate:datePicker.date]];
    [_closingDateTxtFld resignFirstResponder];
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接