UIDatePicker在"完成"上获得.date属性按钮按下

时间:2017-01-09 21:40:02

标签: ios objective-c uidatepicker

我有一个自定义视图,顶部附有UIDatePicker和完成按钮。

当我按下完成按钮时,我想获得UIDatePicker 中的时间。

当我按下按钮时我收到错误(因为发件人是UIBarButtonItem,我预期)并且更改日期时间按预期工作。

其他解决方案显示单独的选择器,但是,我希望(如果可能的话)调用相同的选择器并获取所选内容,就好像它在选择器视图中滚动一样。

我想更改选择器方法以将其作为id接收但是,这不起作用。

这就是我现在正在做的事情,我觉得这可能是愚蠢的事情:

UIView *v = [[UIView alloc] init];

// Create the date time picker
CGRect pickerFrame = CGRectMake(0, 0, 320, 216);
UIDatePicker *pView = [[UIDatePicker alloc] initWithFrame:pickerFrame];

pView.datePickerMode = UIDatePickerModeTime;
[pView addTarget:self action:@selector(dateTimePickerValueChanged:) forControlEvents:UIControlEventValueChanged];

dateTimePicker = pView;
[v addSubview:dateTimePicker];

// done button
CGRect toolBarFrame = CGRectMake(0, 0, 320, 44);
UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:toolBarFrame];
UIBarButtonItem *flexibleItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(dateTimePickerValueChanged:)];
NSArray *toolBarItems = [NSArray arrayWithObjects:flexibleItem, doneButton, nil];
[toolBar setItems:toolBarItems];
[v addSubview:toolBar];

- (void)dateTimePickerValueChanged:(UIDatePicker *)datePicker {
    NSLog(@"time on change: %@", datePicker.date);

图片参考:

{{3}}

4 个答案:

答案 0 :(得分:1)

你对导致此崩溃的原因是正确的。我认为分离选择器是正确的道路。您可以让两个选择器调用相同的方法。这样你就不会复制任何代码。

答案 1 :(得分:1)

编写没有参数的方法,并将UIDatePicker作为整个类的属性或全局对象,以便您可以从任何位置访问它。

现在将方法传递给两个选择器,这样您就可以按下完成按钮的日期。

- (void)dateTimePickerValueChanged {
    NSLog(@"time on change: %@", datePicker.date);
}

答案 2 :(得分:0)

执行此操作的正确方法是创建一个NSDate对象,可根据您的要求访问该对象。现在从UIDatePicker创建一个值已更改的方法。每当调用此方法时,请将日期选择器.date属性的值设置为NSDate对象。 按完成按钮后,使用NSDate对象的值。它会给你正确的价值。

@interface ViewController(){
NSDate *globalDate;
}
@end

@implementation ViewController 

- (void)dateTimePickerValueChanged {
    globalDate = datePicker.date;
}

- (IBAction)donePressed {
NSLog(@"%@",globalDate);
}

@end

答案 3 :(得分:-1)

<强> TIME

 datePicker=[[UIDatePicker alloc]init];
datePicker.datePickerMode=UIDatePickerModeTime;
[yourField 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]];
[yourField setInputAccessoryView:toolBar];



-(void)ShowSelectedDate
{
NSDateFormatter *dateFormat=[[NSDateFormatter alloc]init];
dateFormat.dateStyle=NSDateFormatterMediumStyle;
[dateFormat setDateFormat:@"hh:mm"];
NSString *str=[NSString stringWithFormat:@"%@",[dateFormat  stringFromDate:datePicker.date]];
//assign text to label
yourField =str;
[yourField resignFirstResponder];

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:0.5];
[UIView setAnimationBeginsFromCurrentState:YES];
self.view.frame = CGRectMake(0,0,self.view.frame.size.width, self.view.frame.size.height);
[UIView commitAnimations];
}