티스토리 뷰
반응형
시간 설정 시 Picker View에서 시간 제한하기.
사용 목적.
푸시 알림을 사용자가 정해준 시간에만 발송하기 위해 시작시간과 종료 시간을 설정.
피커를 사용하여 시작 시간은 종료시간보다 작게, 종료시간은 시작시간 보다 크게 설정하기 위해 사용.
결과
피커뷰에서 시간을 선택 할 경우 min, max 설정으로 인해 사용자가 시간을 선택 할 수 없게 한다.
코드
피커뷰를 닫을 수 있는 View를 추가하여 닫기 버튼 추가.
시작시간, 종료시간 label 선택 시 picker를 보여주고, 제한값을 준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | - (void)viewDidLoad { [super viewDidLoad]; pickerCloseButtonView = [[UIView alloc] initWithFrame:CGRectMake(0, height - (30+240), width, 30)]; [pickerCloseButtonView setBackgroundColor:[UIColor lightGrayColor]]; pickerCloseButtonView.layer.borderWidth = 0.6f; pickerCloseButtonView.layer.borderColor = [[UIColor lightGrayColor] CGColor]; [self.view addSubview:pickerCloseButtonView]; [pickerCloseButtonView setHidden:YES]; UIButton *closeBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [closeBtn setFrame:CGRectMake(width - 80, 0, 60, 30)]; [closeBtn setTitle:@"닫기" forState:UIControlStateNormal]; closeBtn.titleLabel.textAlignment = NSTextAlignmentCenter; [closeBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; [closeBtn addTarget:self action:@selector(selectPickerViewClose) forControlEvents:UIControlEventTouchUpInside]; [pickerCloseButtonView addSubview:closeBtn]; //시간 설정 [datePIcker addTarget:self action:@selector(changeDatePicker) forControlEvents:UIControlEventValueChanged]; } #pragma mark - DATE PICKER - (IBAction)selectTimeLabel:(UIButton *)sender { [datePIcker setHidden:NO]; [pickerCloseButtonView setHidden:NO]; datePIcker.tag = sender.tag; //피커 데이터 초기화. NSDateFormatter *df = [[NSDateFormatter alloc] init]; df.timeStyle = NSDateFormatterShortStyle; df.dateStyle = NSDateFormatterShortStyle; df.dateFormat = @"HH:mm"; [datePIcker setDate:[self getLimitedDate:(sender.tag==0)?app.sTime:app.eTime] animated:YES]; if (sender.tag == 0) { //시작시간. [startBG setImage:[UIImage imageNamed:@"bg_timesetting_.png"]]; datePIcker.minimumDate = NULL; datePIcker.maximumDate = [self getLimitedDate:app.eTime]; }else{ //종료시간. [endBG setImage:[UIImage imageNamed:@"bg_timesetting_.png"]]; datePIcker.maximumDate = NULL; datePIcker.minimumDate = [self getLimitedDate:app.sTime]; } NSLog(@"minimumData : %@, maximumDate : %@", datePIcker.minimumDate , datePIcker.maximumDate); NSLog(@"date : %@, %@", datePIcker.date , [df stringFromDate:datePIcker.date]); //hidden view 위치 정렬. CGRect tempFrame = pickerCloseButtonView.frame; tempFrame.origin.y = datePIcker.frame.origin.y - pickerCloseButtonView.frame.size.height; pickerCloseButtonView.frame = tempFrame; } //최저, 최고 시간을 구한다. -(NSDate *)getLimitedDate:(NSString *)timeStr { NSDate *date; NSDateComponents *com; NSDateFormatter *formatter; NSDate *today = [NSDate date]; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *weekdayComponentsY = [calendar components:NSYearCalendarUnit fromDate:today]; NSDateComponents *weekdayComponentsM = [calendar components:NSMonthCalendarUnit fromDate:today]; NSDateComponents *weekdayComponentsD = [calendar components:NSDayCalendarUnit fromDate:today]; com = [[NSDateComponents alloc] init]; [com setYear:[weekdayComponentsY year]]; [com setMonth:[weekdayComponentsM month]]; [com setDay:[weekdayComponentsD day]]; [com setHour:[[timeStr substringToIndex:2] intValue]]; [com setMinute:[[timeStr substringFromIndex:3] intValue]]; date = [[NSCalendar currentCalendar] dateFromComponents:com]; formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm"]; return date; } | cs |
반응형
'iOS > 자료정리' 카테고리의 다른 글
NSString 요약 (0) | 2015.07.08 |
---|---|
[appledoc]주석을 통한 appledoc로 개발 문서 작성하기. (0) | 2015.07.06 |
[아이폰][해상도별 이미지 차이]200px 이미지 테스트 결과. (0) | 2015.06.17 |
[iOS] Tag값을 이용한 객체 속성 변경. (0) | 2015.04.08 |
[iphone] ios에서 youtube 동영상 재생하기. (youtube helper) (0) | 2015.03.05 |
댓글
반응형