iOS 预产期计算器 —— HERO博客

来源:互联网 发布:番茄软件下载 编辑:程序博客网 时间:2024/04/28 20:38

做了一个预产期计算器,首先看一下效果图:



对于预产期的计算方法网上可以查到很多,我简单说下比较容易理解的,最后一次月经时间加上280天(平均月经周期28天 * 10个月),根据月经周期有一点浮动,最后的公式应该为:末次月经时间 + 280天 + (月经周期 - 28天)。


前两篇文章写了自定义UIDatePicker日期选择器视图和自定义UIPickerView天数选择器视图,相关代码可以点击连接查看,下面贴上控制器代码:

#import "ViewController.h"#import "HWDatePicker.h"#import "HWDaysPicker.h"#define mainW [UIScreen mainScreen].bounds.size.width#define mainH [UIScreen mainScreen].bounds.size.height@interface ViewController ()<UITextFieldDelegate, HWDatePickerDelegate, HWDaysPickerDelegate>@property (nonatomic, strong) UITextField *predicted;@property (nonatomic, strong) UITextField *menstrualTime;@property (nonatomic, strong) UITextField *menstrualDays;@property (nonatomic, strong) HWDatePicker *datePicker;@property (nonatomic, strong) HWDaysPicker *daysPicker;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];        self.view.backgroundColor = [UIColor blackColor];        //创建控件    [self creatControl];}- (void)creatControl{    NSArray *textArray = @[@"  您的预产期是:", @"  末次月经时间", @"  月经周期天数"];    NSArray *placeholderArray = @[@"", @"请设置末次时间", @"请设置周期天数"];        //textField    for (int i = 0; i < 3; i++) {        UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(mainW * 0.05, mainW * 0.25 + mainW * 0.15 * i, mainW * 0.8, mainW * 0.12)];        textField.background = [UIImage imageNamed:@"textFieldBj"];        textField.delegate = self;        textField.placeholder = placeholderArray[i];        //左视图        UILabel *left = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, mainW * 0.4, mainW * 0.12)];        left.textAlignment = NSTextAlignmentLeft;        left.text = textArray[i];        left.textColor = [UIColor grayColor];        textField.leftView = left;        textField.leftViewMode = UITextFieldViewModeAlways;        //右视图        UILabel *right = [[UILabel alloc] initWithFrame:CGRectMake(mainW * 0.12 - 15, 0, 15, mainW * 0.12)];        textField.rightView = right;        textField.rightViewMode = UITextFieldViewModeAlways;        textField.textAlignment = NSTextAlignmentRight;        [self.view addSubview:textField];        if (i == 0) {            self.predicted = textField;        }else if (i == 1) {            self.menstrualTime = textField;        }else {            self.menstrualDays = textField;        }    }        //计算按钮    UIButton *computeBtn = [[UIButton alloc] initWithFrame:CGRectMake(mainW * 0.49, mainW * 0.7, mainW * 0.36, mainW * 0.11)];    [computeBtn setImage:[UIImage imageNamed:@"computeBtn"] forState:UIControlStateNormal];    [computeBtn addTarget:self action:@selector(computeBtnOnClick) forControlEvents:UIControlEventTouchUpInside];    [self.view addSubview:computeBtn];        //日期选择器    _datePicker = [[HWDatePicker alloc] initWithFrame:CGRectMake(mainW * 0.05, mainH, mainW * 0.9, mainW * 0.5)];    _datePicker.delegate = self;    [self.view addSubview:_datePicker];}//天数选择器- (HWDaysPicker *)daysPicker{    if (_daysPicker == nil) {        _daysPicker = [[HWDaysPicker alloc] initWithFrame:CGRectMake(mainW * 0.05, mainH, mainW * 0.9, mainW * 0.5)];        _daysPicker.delegate = self;        [self.view addSubview:_daysPicker];    }    return _daysPicker;}//计算按钮点击事件- (void)computeBtnOnClick{    if ([_menstrualTime.text isEqualToString:@""]) {        NSLog(@"未设置末次月经时间");            }else if ([_menstrualDays.text isEqualToString:@""]) {        NSLog(@"未设置月经周期天数");            }else {        [_daysPicker dismiss];        [_datePicker dismiss];                NSInteger days = 280 + ([_menstrualDays.text integerValue] - 28);                _predicted.text = [self computeDateWithDays:days];    }}//计算一定天数后的新日期- (NSString *)computeDateWithDays:(NSInteger)days{    NSDateFormatter *dateFormatter = [NSDateFormatter new];    [dateFormatter setDateFormat:@"yyyy-MM-dd"];    NSDate *myDate = [dateFormatter dateFromString:_menstrualTime.text];    NSDate *newDate = [myDate dateByAddingTimeInterval:60 * 60 * 24 * days];        return [dateFormatter stringFromDate:newDate];}#pragma mark - UITextFieldDelegate- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{    if (textField == _predicted) {        return NO;            }else if (textField == _menstrualTime) {        if (_datePicker.frame.origin.y != mainH) {            [_datePicker dismiss];        }else{            [_daysPicker dismiss];            [_datePicker show];        }        return NO;            }else if (textField == _menstrualDays) {        if (self.daysPicker.frame.origin.y != mainH) {            [_daysPicker dismiss];                    }else {            [_datePicker dismiss];            [self.daysPicker show];        }        return NO;    }    return YES;}#pragma mark - HWDatePickerDelegate- (void)datePickerView:(HWDatePicker *)datePickerView didClickSureBtnWithSelectDate:(NSString *)date{    _menstrualTime.text = date;}#pragma mark - HWDaysPickerDelegate- (void)daysPickerView:(HWDaysPicker *)daysPicker didSelectRowWithDays:(NSString *)days{    _menstrualDays.text = days;}@end



2 0
原创粉丝点击