如何在操作表中添加dateselect器?

- (IBAction) showCatPicker { if (self.catList !=nil) { self.catList=nil; [catList release]; } self.catList = [[NSMutableArray alloc] init]; self.actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; [self.actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent]; CGRect pickerFrame = CGRectMake(0, 40, 0, 0); if(self.catPicker == nil) { self.catPicker = [[UIPickerView alloc] initWithFrame:pickerFrame]; self.catPicker.showsSelectionIndicator = YES; self.catPicker.dataSource = self; self.catPicker.opaque = YES; self.catPicker.multipleTouchEnabled = YES; self.catPicker.userInteractionEnabled = YES; self.catPicker.delegate = self; } [self.actionSheet addSubview:self.catPicker]; UISegmentedControl *closeButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Select"]]; closeButton.momentary = YES; closeButton.frame = CGRectMake(260, 7.0f, 50.0f, 30.0f); closeButton.segmentedControlStyle = UISegmentedControlStyleBar; closeButton.tintColor = [UIColor colorWithRed:19.0/255 green:122.0/255 blue:53.0/255 alpha:1.0]; [closeButton addTarget:self action:@selector(dismissGenderPicker:) forControlEvents:UIControlEventValueChanged]; UISegmentedControl *cancelButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Cancel"]]; cancelButton.momentary = YES; cancelButton.frame = CGRectMake(10, 7.0f, 50.0f, 30.0f); cancelButton.segmentedControlStyle = UISegmentedControlStyleBar; cancelButton.tintColor = [UIColor colorWithRed:19.0/255 green:122.0/255 blue:53.0/255 alpha:1.0]; [cancelButton addTarget:self action:@selector(cancelActionSheet) forControlEvents:UIControlEventValueChanged]; [self.actionSheet addSubview:cancelButton]; [self.actionSheet addSubview:closeButton]; [cancelButton release]; [closeButton release]; [self.actionSheet showInView:self.view]; [self.actionSheet setBounds:CGRectMake(0, 0, 320, 485)]; [catPicker reloadComponent:0]; } 

您绝对不应该使用UIActionSheet来保存UIDatePicker,因为此function已被弃用!

从文档 :

子类化笔记

UIActionSheet不是被devise为子类,也不应该添加视图到它的层次结构中。 如果您需要提供比UIActionSheet API提供的更多定制的工作表,您可以创build自己的模型并使用presentViewController呈现它:animated:completion :.

重要提示:UIActionSheet在iOS 8中已弃用。(请注意,UIActionSheetDelegate也被弃用。)要在iOS 8及更高版本中创build和pipe理操作表,请使用带有UIAlertControllerStyleActionSheet的preferredStyle的UIAlertController。

你可以很容易做的是创build一个UIView来保存UIDatePicker,并根据需要为视图设置animation。 如果需要,你甚至可以添加一个UIToolbar。

这是一个例子:

创build两个属性:

 @property (strong, nonatomic) UIDatePicker *theDatePicker; @property (strong, nonatomic) UIView *pickerView; 

创build你的select器,embedded到UIView并显示:

  -(void) createDatePickerAndShow { UIToolbar *controlToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, pickerView.bounds.size.width, 44)]; [controlToolbar sizeToFit]; UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; UIBarButtonItem *setButton = [[UIBarButtonItem alloc] initWithTitle:@"Set" style:UIBarButtonItemStyleDone target:self action:@selector(dismissDateSet)]; UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelDateSet)]; [controlToolbar setItems:[NSArray arrayWithObjects:spacer, cancelButton, setButton, nil] animated:NO]; [theDatePicker setFrame:CGRectMake(0, controlToolbar.frame.size.height - 15, theDatePicker.frame.size.width, theDatePicker.frame.size.height)]; if (!pickerView) { pickerView = [[UIView alloc] initWithFrame:theDatePicker.frame]; } else { [pickerView setHidden:NO]; } CGFloat pickerViewYpositionHidden = self.view.frame.size.height + pickerView.frame.size.height; CGFloat pickerViewYposition = self.view.frame.size.height - pickerView.frame.size.height; [pickerView setFrame:CGRectMake(pickerView.frame.origin.x, pickerViewYpositionHidden, pickerView.frame.size.width, pickerView.frame.size.height)]; [pickerView setBackgroundColor:[UIColor whiteColor]]; [pickerView addSubview:controlToolbar]; [pickerView addSubview:theDatePicker]; [theDatePicker setHidden:NO]; [self.view addSubview:pickerView]; [UIView animateWithDuration:0.5f animations:^{ [pickerView setFrame:CGRectMake(pickerView.frame.origin.x, pickerViewYposition, pickerView.frame.size.width, pickerView.frame.size.height)]; } completion:nil]; } And to dismiss the DatePicker: -(void) cancelDateSet { CGFloat pickerViewYpositionHidden = self.view.frame.size.height + pickerView.frame.size.height; [UIView animateWithDuration:0.5f animations:^{ [pickerView setFrame:CGRectMake(pickerView.frame.origin.x, pickerViewYpositionHidden, pickerView.frame.size.width, pickerView.frame.size.height)]; } completion:nil]; } 
  self.view.userInteractionEnabled = NO; self.blurView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; [self.blurView setBackgroundColor:[UIColor lightGrayColor]]; [self.blurView setAlpha:0.3]; [[[UIApplication sharedApplication] delegate].window addSubview:self.blurView]; CGRect pickerFrame = CGRectMake(0, 40, 0, 0); UIDatePicker *pickerView = [[UIDatePicker alloc] initWithFrame:pickerFrame]; pickerView.datePickerMode = UIDatePickerModeDate; [pickerView setBackgroundColor:[UIColor whiteColor]]; [pickerView addTarget:self action:@selector(pickerChanged:) forControlEvents:UIControlEventValueChanged]; __block CGRect frame = CGRectMake(0, [[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width, 220); self.viewForPicker = [[UIView alloc] initWithFrame:frame]; [self.viewForPicker setBackgroundColor:[UIColor whiteColor]]; [self.viewForPicker addSubview:pickerView]; [[[[UIApplication sharedApplication] delegate] window] addSubview:self.viewForPicker]; UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [button setTitleColor:[UIColor lightGrayColor] forState:UIControlStateHighlighted]; [button setTitle:@"Done" forState:UIControlStateNormal]; [button addTarget:self action:@selector(doneButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; [button setFrame:CGRectMake(250, 15, 60, 30)]; [button.layer setCornerRadius:5.0]; [button.layer setBorderWidth:1.0]; [button.layer setBorderColor:[[IMAppStyle appColor] CGColor]]; [self.viewForPicker addSubview:button]; [self.viewForPicker.layer setCornerRadius:8.0]; float animationDuration = 0.25; [UIView animateWithDuration:animationDuration animations:^{ frame.origin.y -= (180+40+35); [self.viewForPicker setFrame:frame]; }];