2011-12-02 25 views
8
- (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]; 
} 

Trả lời

1
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]; 
    }]; 
3

Bạn chắc chắn KHÔNG nên sử dụng UIActionSheet để giữ UIDatePicker vì chức năng này không còn được dùng nữa!

Từ Documentation:

subclassing Ghi chú

UIActionSheet không được thiết kế để được subclassed, cũng không phải bạn nên thêm xem để hệ thống cấp bậc của nó. Nếu bạn cần trình bày trang tính có nhiều tùy chọn hơn hơn API UIActionSheet cung cấp, bạn có thể tạo của riêng mình và hiển thị nó theo cách tương tự với presentViewController: animated: completion :.

Chú ý: UIActionSheet bị phản đối trong iOS 8. (Lưu ý rằng UIActionSheetDelegate cũng bị phản đối). Để tạo và quản lý hành động tờ trong iOS 8 và sau đó, thay vì sử dụng UIAlertController với một preferredStyle of UIAlertControllerStyleActionSheet.

Điều bạn có thể thực hiện dễ dàng là tạo UIView để giữ UIDatePicker và tạo hoạt ảnh cho chế độ xem phù hợp. Bạn thậm chí có thể thêm một UIToolbar vào nó nếu bạn cần.

Dưới đây là một ví dụ:

Tạo hai thuộc tính:

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

Tạo bảng chọn của bạn, nhúng nó vào UIView và hiển thị:

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

Hoàn toàn đúng, tôi đồng ý với bạn vì iOS 8 cấm bây giờ thêm các bản xem trước vào UIActionSheet và hiển thị một chế độ xem trống kiểu mà không thể bị loại bỏ khỏi ứng dụng của bạn, trừ khi bạn giết nó! – cdescours

+0

Vì vậy, công việc này có hoạt động không? Có thể làm điều gì sai ở đâu đó, nhưng tôi không nhận được gì trên màn hình. – Moelbeck

Các vấn đề liên quan