如何在Action Sheet中添加日期选择器? [英] How to add Date picker in Action Sheet?

查看:108
本文介绍了如何在Action Sheet中添加日期选择器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

- (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,因为不推荐使用此功能!

You should definitely NOT use UIActionSheet to hold an UIDatePicker because this functionality is deprecated!

来自文档


子类注释

Subclassing Notes

UIActionSheet不是为子类设计的,也不应该在其层次结构中添加
视图。如果您需要提供比UIActionSheet API提供的
定制更多的工作表,您可以自己创建
并使用
presentViewController以模态方式呈现它:animated:completion:。

UIActionSheet is not designed to be subclassed, nor should you add views to its hierarchy. If you need to present a sheet with more customization than provided by the UIActionSheet API, you can create your own and present it modally with presentViewController:animated:completion:.


重要提示:iOS 8中不推荐使用UIActionSheet 。(注意,
UIActionSheetDelegate也已被弃用。)要在iOS 8及更高版本中创建和管理动作
工作表,而是使用UIAlertController和
优先风格的UIAlertControllerStyleActionSheet。

Important: UIActionSheet is deprecated in iOS 8. (Note that UIActionSheetDelegate is also deprecated.) To create and manage action sheets in iOS 8 and later, instead use UIAlertController with a preferredStyle of UIAlertControllerStyleActionSheet.

你可以很容易地创建一个UIView来保存UIDatePicker并根据需要设置视图的动画。如果需要,你甚至可以为它添加一个UIToolbar。

What you could very easily do is to create an UIView to hold the UIDatePicker and animate the view as appropriate. You can even add an UIToolbar to it if you need to.

这是一个例子:

创建两个属性:

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

创建您的选择器,将其嵌入 UIView 并显示:

Create your picker, embed it into the UIView and show:

    -(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];
    }

这篇关于如何在Action Sheet中添加日期选择器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆