效果圖
思路是依靠 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]; }
新聞熱點
疑難解答