·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> UIalertController日期控件

UIalertController日期控件

作者:佚名      IOS开发编辑:admin      更新时间:2022-07-23

效果图

思路是依靠 UIalertController的高度是由内容判定,修改其view 即可

首先不需要改变该类的初始化(因为只是修改其view的界面)

继承UIalertController的.h文件

#import <UIKit/UIKit.h>
typedef void(^BlockDate)(id date);
@interface SheetDate : UIAlertController

@PRoperty(nonatomic,copy)BlockDate blockDate;
@property(retain,nonatomic)UIDatePicker* datePicker;
/**
 *  单例
 */
+(SheetDate *)defaultSheetDate;

@end

 

继承UIalertController的.m文件

#import "SheetDate.h"

@interface SheetDate ()
@end

@implementation SheetDate

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
/**
 *  添加日期控件
 */
-(void)addDatePicker
{
        self.datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 320, 216)];
        self.datePicker.datePickerMode = UIDatePickerModeDate;
        self.datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
        [self.view addSubview:self.datePicker];
    

}
/**
 *  处理日期数据
 *
 *  @return
 */
-(NSString*)dealDate
{
    NSDateFormatter * formatter = [[NSDateFormatter alloc ] init];
    if (self.datePicker.datePickerMode==UIDatePickerModeTime)
    {
        [formatter setDateFormat:@"HH:ss"];
    }
    else if(self.datePicker.datePickerMode==UIDatePickerModeDate)
    {
        [formatter setDateFormat:@"YYYY-MM-dd"];
    }
    else if(self.datePicker.datePickerMode==UIDatePickerModeDateAndTime)
    {
        [formatter setDateFormat:@"YYYY-MM-dd HH:ss"];
    }
    
    NSString* currentTime = [formatter stringFromDate:self.datePicker.date];
    return currentTime;

}
/**
 *  单例
 *
 *  @return
 */
+(SheetDate *)defaultSheetDate
{
    //sheetDate只会实例化一次
    static SheetDate* sheetDate=nil;
    //保证线程安全,defaultSheetDate只执行一次
    static dispatch_once_t once;
    dispatch_once(&once, ^
                  {
                      sheetDate=[SheetDate alertControllerWithTitle:nil
                                                            message:@"\n\n\n\n\n\n\n\n\n\n\n"
                                                     preferredStyle:(UIAlertControllerStyleActionSheet)];
                      [sheetDate addDatePicker];
                      UIAlertAction* ok=[UIAlertAction actionWithTitle:@"确定"
                                                                 style:(UIAlertActionStyleDefault)
                                                               handler:^(UIAlertAction * __nonnull action)
                                         {
                                             sheetDate.blockDate([sheetDate dealDate]);
                                             
                                         }];
                      [sheetDate addAction:ok];

                  });
    
    return sheetDate;
}

添加的日期控件是以属性形式添加的,可以根据情况配置。


首先使用系统的方法创建uialertcontroller对象,使用\n是因为需要扩大显示的高度,然后调用[sheetDate addDatePicker]添加自定义界面,根据情况初始化使用日期数据的block

然后在sheet的选项中触发就可以了。

然后是使用

/**
 *  选择日期时间
 *
 *  @param sender
 */
- (IBAction)chooseDate:(UIButton *)sender
{
    SheetDate* sheetDate=[SheetDate defaultSheetDate];
    sheetDate.datePicker.datePickerMode=UIDatePickerModeDateAndTime;
    sheetDate.blockDate=^(NSString* date)
    {
        NSLog(@"%s\n%@",__FUNCTION__,date);
        [sender setTitle:date
                forState:(UIControlStateNormal)];
        
    };

    [self presentViewController:sheetDate
                       animated:YES
                     completion:nil];


    
}