oc之mac中NSDatePicker(日期选择)

2017年09月08日 17:44:04 lovechris00 阅读数:2830更多

所属专栏: macOS 开发

版权声明:本文为博主原创文章,转载请附上本文链接地址。from : https://blog.csdn.net/lovechris00 https://blog.csdn.net/lovechris00/article/details/77897368

使用 NSDatePicker 就可以调出日期选择,结果图如最下。

  • 注意事项
  • 创建
  • 枚举
    • NSDatePickerStyle
    • NSDatePickerElementFlags
  • 效果图
  • 参考资料

注意事项

  • 建议把这个 picker 作为全局变量,这样就不会每次点击按钮都添加。
  • 使用setAction 监听选中的值;
  • 不管给 picker 设置的 frame 是多大,picker 的显示大小是固定的。
  • 调出的 picker 带有日期和钟表的时间,选择日期 和 拨动钟表盘的 时分秒 针 都会触发 updateDateResult 方法

创建

- (void)pickTime{

    NSDatePicker *datePicker = [[NSDatePicker alloc] initWithFrame:NSMakeRect(0, 0, 300, 300)];

    [datePicker setDatePickerStyle:NSClockAndCalendarDatePickerStyle];

    datePicker.wantsLayer = YES;

    datePicker.layer.backgroundColor = [NSColor cyanColor].CGColor;

    // 设置日期选择控件的类型为“时钟和日历”。其他类型有如,NSTextField文本框

    [datePicker setDateValue: [NSDate date]];

    // 初始化选中当前日期

    [datePicker setAction:@selector(updateDateResult:)];

    // 绑定每次选择日期触发的action

    [self.view addSubview:datePicker];

}

- (void)updateDateResult:(NSDatePicker *)datePicker{

    // 拿到当前选择的日期

    NSDate *theDate = [datePicker dateValue];

    NSLog(@"日期:%@",theDate);

    if (theDate) {

        // 把选择的日期格式化成想要的形式

        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

        formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";

        NSString *dateString = [formatter stringFromDate:theDate];

        NSLog(@"日期:%@",dateString);

    }

枚举

NSDatePickerStyle

typedef NS_ENUM(NSUInteger, NSDatePickerStyle) {

    NSTextFieldAndStepperDatePickerStyle    = 0,

    NSClockAndCalendarDatePickerStyle       = 1,

    NSTextFieldDatePickerStyle              = 2

};

pastedGraphic.png

NSDatePickerElementFlags

typedef NS_OPTIONS(NSUInteger, NSDatePickerElementFlags) {

    /* Time Elements */

    NSHourMinuteDatePickerElementFlag       = 0x000c,

    NSHourMinuteSecondDatePickerElementFlag = 0x000e,

    NSTimeZoneDatePickerElementFlag     = 0x0010,

    /* Date Elements */

    NSYearMonthDatePickerElementFlag        = 0x00c0,

    NSYearMonthDayDatePickerElementFlag     = 0x00e0,

    NSEraDatePickerElementFlag          = 0x0100,

};

效果图

pastedGraphic_1.png

参考资料

悲观患者的《mac开发系列28:日期选择功能实现》http://www.jianshu.com/p/6886ed384cc4

一、以NSString形式获取当前时间

-(NSString*)getCurrentTimes{

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    // ----------设置你想要的格式,hh与HH的区别:分别表示12小时制,24小时制

    [formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];

    //现在时间,你可以输出来看下是什么格式

    NSDate *datenow = [NSDate date];

    //----------将nsdate按formatter格式转成nsstring

    NSString *currentTimeString = [formatter stringFromDate:datenow];

    NSLog(@"currentTimeString =  %@",currentTimeString);

    return currentTimeString;

}

二、分别单独获得年、月、日

NSDate *date =[NSDate date];

NSDateFormatter *formatter = [[NSDateFormatter alloc]init];

[formatter setDateFormat:@"yyyy"];

NSInteger currentYear=[[formatter stringFromDate:date] integerValue];

[formatter setDateFormat:@"MM"];

NSInteger currentMonth=[[formatter stringFromDate:date]integerValue];

[formatter setDateFormat:@"dd"];

NSInteger currentDay=[[formatter stringFromDate:date] integerValue];

NSLog(@"currentDate = %@ ,year = %ld ,month=%ld, day=%ld",date,currentYear,currentMonth,currentDay);

三、获得时间间隔:

四、获取星期几:

这里我是封装了一个方法,代码如下:

-(void)setDate{

    NSDate *date =[NSDate date];

    //获取星期几

    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

    NSDateComponents *comps = [[NSDateComponents alloc] init];

    NSInteger unitFlags =  NSCalendarUnitWeekday ;

    comps = [calendar components:unitFlags fromDate:date];

    NSInteger week = [comps weekday];

    NSLog(@"week == %zd",week);

    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];

    [formatter setDateFormat:@"yyyy"];

    NSString *currentYear=[formatter stringFromDate:date];

    [formatter setDateFormat:@"MM"];

    NSString *currentMonth=[formatter stringFromDate:date];

    self.monthAndYearLabel.text=[NSString stringWithFormat:@"%@/%@",currentMonth,currentYear];

    [formatter setDateFormat:@"dd"];

    NSString *currentDay=[formatter stringFromDate:date];

    self.dayLabel.text = currentDay;

    switch (week) {

        case 1:

            self.weekdayLabel.text = @"星期日";

            break;

        case 2:

            self.weekdayLabel.text = @"星期一";

            break;

        case 3:

            self.weekdayLabel.text = @"星期二";

            break;

        case 4:

            self.weekdayLabel.text = @"星期三";

            break;

        case 5:

            self.weekdayLabel.text = @"星期四";

            break;

        case 6:

            self.weekdayLabel.text = @"星期五";

            break;

        case 7:

            self.weekdayLabel.text = @"星期六";

            break;

        default:

             self.weekdayLabel.text = @"";

            break;

    }

}

总结可知,不同时间形式的获取,主要靠NSDateFormatter这个类的对象的设置。例如,如果还想要获得“ 9:00AM”的形式,可以设置其格式为“hh:mmaaa”等。

原文:https://blog.csdn.net/lyxleft/article/details/79226774

猜你喜欢

转载自www.cnblogs.com/sundaymac/p/10338333.html