2014-03-19 6 views

답변

0

일반적으로 UIDatePicker 상단에 툴바를 추가하고 있습니다. 도구 모음에서 날짜 선택 도구를 눌렀을 때 닫을 메서드를 호출하는 단추를 추가합니다.

UIDatePicker 인스턴스 아래에 UIView 인스턴스를 추가하고 touchesBegan 메서드를 구현하여 UIDatePicker를 닫을 수도 있습니다. 이렇게하면 사용자가 datepicker 외부를 탭하면 datepicker를 닫는 touchesBegan 메서드가 호출됩니다.

+0

에서 UIAnimation에 대한 블록 업데이트되었습니다. 고마워. 고마워. –

1

다음 코드가 문제를 해결하기 바랍니다. 이 오버레이보기에 외부 도청뿐만 아니라 "완료"버튼을 탭에 날짜 선택을 모두 일축 :

#import "ViewController.h" 

#define kOverlayviewTag  1 
#define kDatepickerTag  2 
#define kToolbarTag   3 

#define kToolbarHeight  44 
#define kDatepickerHeight 216 
#define kGenericWidth  320 
#define kInvisibleAlpha  0 
#define kTransparentAlpha 0.5 
#define kOpaqueAlpha  1 


@interface ViewController() 

-(IBAction)buttonTapped:(id)sender; 

@end 

@implementation ViewController 

-(void)buttonTapped:(id)sender 
{ 
    if ([self.view viewWithTag:kOverlayviewTag]) { 
     return; 
    } 

    UIView *overlayView = [[UIView alloc] initWithFrame:self.view.bounds]; 
    overlayView.alpha = kInvisibleAlpha; 
    overlayView.backgroundColor = [UIColor blackColor]; 
    overlayView.tag = kOverlayviewTag; 

    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissDatePicker:)]; 
    [overlayView addGestureRecognizer:tapGesture]; 
    [self.view addSubview:overlayView]; 

    UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height+kToolbarHeight, kGenericWidth, kDatepickerHeight)]; 
    datePicker.tag = kDatepickerTag; 
    [datePicker addTarget:self action:@selector(changeDate:) forControlEvents:UIControlEventValueChanged]; 
    [self.view addSubview:datePicker]; 

    UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height, kGenericWidth, kToolbarHeight)]; 
    toolBar.tag = kToolbarTag; 
    toolBar.barStyle = UIBarStyleBlackTranslucent; 
    UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissDatePicker:)]; 
    [toolBar setItems:[NSArray arrayWithObjects:spacer, doneButton, nil]]; 
    [self.view addSubview:toolBar]; 


    CGRect toolbarTargetFrame = CGRectMake(0, self.view.bounds.size.height-kDatepickerHeight-kToolbarHeight, kGenericWidth, kToolbarHeight); 
    CGRect datePickerTargetFrame = CGRectMake(0, self.view.bounds.size.height-kDatepickerHeight, kGenericWidth, kDatepickerHeight); 
    [UIView animateWithDuration:0.5 animations:^{ 
     toolBar.frame = toolbarTargetFrame; 
     datePicker.frame = datePickerTargetFrame; 
     overlayView.alpha = kTransparentAlpha; 
    }]; 


} 

- (void)dismissDatePicker:(id)sender { 
    CGRect toolbarTargetFrame = CGRectMake(0, self.view.bounds.size.height, kGenericWidth, kToolbarHeight); 
    CGRect datePickerTargetFrame = CGRectMake(0, self.view.bounds.size.height+kToolbarHeight, kGenericWidth, kDatepickerHeight); 

    [UIView animateWithDuration:0.5 animations:^{ 
     [self.view viewWithTag:kOverlayviewTag].alpha = kInvisibleAlpha; 
     [self.view viewWithTag:kDatepickerTag].frame = datePickerTargetFrame; 
     [self.view viewWithTag:kToolbarTag].frame = toolbarTargetFrame; 
    } completion:^(BOOL finished) { 
     [[self.view viewWithTag:kOverlayviewTag] removeFromSuperview]; 
     [[self.view viewWithTag:kToolbarTag] removeFromSuperview]; 
     [[self.view viewWithTag:kDatepickerTag] removeFromSuperview]; 
    }]; 
} 


- (void)changeDate:(UIDatePicker *)sender { 
    NSLog(@"New Date: %@", sender.date); 
} 

내가 날짜 선택기를 닫습니다 방법을 필요 UIDatePicker pop up after UIButton is pressed

관련 문제