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

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



对于预产期的计算方法网上可以查到很多,我简单说下比较容易理解的,最后一次月经时间加上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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值