全部產品
Search
文件中心

Mobile Platform as a Service:日期組件

更新時間:Jul 13, 2024

AUDatePicker 為日期選擇控制項。

效果圖

介面說明

AUDatePicker.h 樣本:

//
//  ALPPicketView.h
//  TestCell
//

#import <UIKit/UIKit.h>

@class AUDatePicker;

@protocol AUDatePickerDelegate <UIPickerViewDataSource, UIPickerViewDelegate>

/*
 * 點取訊息時回調
 */
- (void)cancelPickerView:(AUDatePicker *)pickerView;

/*
 * 點完成時回調,選中項可通過 pickerView/Users/zhuwei/ios-phone-antui/ANTUI/Sources/Views/pickerView/AUDatePicker.h selectedRowInComponent 返回
 */
- (void)selectedPickerView:(AUDatePicker *)pickerView;

@end
/*!
 @class       AUDatePicker
 @abstract    UIView
 @discussion  原架構封裝的選取器,在原來系統控制項上加上的去掉和完成按鈕
 */

@interface AUDatePicker : UIView

@property(nonatomic, strong) UIPickerView *pickerView;      // 通用事務選取器
@property(nonatomic, strong) UIDatePicker *datePickerView;  // 時間選取器

@property(nonatomic, assign) BOOL       isDatePicker;       // 當前是否是時間選取器,預設為 NO

@property(nonatomic, weak) id<AUDatePickerDelegate> delegate;


/*
 * 建立組件
 *
 * @param title 標題,可為 nil
 * @return 建立的組件,預設不顯示,需調用 show
 */
+ (AUDatePicker *)pickerViewWithTitle:(NSString *)title;

/*
 * 初始化對象
 *
 * @param frame 顯示位置
 * @param title 顯示標題,不顯示可設 nil
 * @return 預設返回對象不顯示,要顯示需要調 show
 */
- (id)initWithFrame:(CGRect)frame withTitle:(NSString *)title;

/*
 * 顯示
 */
- (void)show;

/*
 * 隱藏
 */
- (void)hide;

/**
 * 重載資料
 */
- (void)reload;


/**
 當 isDatePicker 為 YES 時,使用 datePickerView 選擇時間

 @param minDate 最小時間
 @param maxDate 最大時間
 */
- (void) setTimeDateminDate:(NSDate *)minDate MaxDate:(NSDate *)maxDate;



/**
 當 isDatePicker 為 YES 時,設定 datePickerView 的目前時間

 @param currentDate 設定當前的時間
 */
- (void) setCurrentDate:(NSDate *) currentDate;


/**
 當 isDatePicker 為 YES 時,設定時間選取器中選擇的時間

 @param date     選中的日期
 @param animated 是否包含動畫
 */
- (void)setAUDatePickerDate:(NSDate *)date animated:(BOOL)animated; // if animated is YES, animate the wheels of time to display the new date

@end

程式碼範例

//
//  APPickerViewViewController.m
//  UIDemo
//

#import "APPickerViewViewController.h"
#import "AUDatePicker.h"

@interface APPickerViewViewController ()<AUDatePickerDelegate,UIPickerViewDelegate,UIPickerViewDataSource>
@property(nonatomic,strong)AUDatePicker* apPickerView;
@property(nonatomic,strong)AUDatePicker* apPickerView2;
@property(nonatomic,strong)AUDatePicker* apPickerView3;
@property(nonatomic,strong)AUDatePicker* apPickerView4;

@property(nonatomic,strong)UILabel* textLabel;
@property(nonatomic,strong)NSArray* yearArray;
@property(nonatomic,strong)NSArray* monthArray;
@property(nonatomic,strong)NSArray* nameArray;
@end

@implementation APPickerViewViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        self.yearArray = @[@"2009",@"2010",@"2011",@"2012",@"2013",@"2014",@"2015",@"2016"];
        self.monthArray = @[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12"];
        self.nameArray = @[@"趙一",@"錢二",@"孫三",@"李四",@"王五",@"張六",@"劉七"];
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self.view setBackgroundColor:[UIColor whiteColor]];

    NSArray* items = @[@"類方法建立",@"成員方法建立",@"時間選取器1",@"時間選取器2"];
    UISegmentedControl* segmentControl = [[UISegmentedControl alloc]initWithItems:items];
    [segmentControl addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventValueChanged];
    segmentControl.selectedSegmentIndex = 0;
    [segmentControl setFrame:CGRectMake(15, 70, AUCommonUIGetScreenWidth() - 30, 30)];
    [self.view addSubview:segmentControl];

    //label 用來顯示 pickerView 選擇的專案
    self.textLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 110, 220, 50)];
    self.textLabel.frame = CGRectOffset(self.textLabel.frame, (AUCommonUIGetScreenWidth()-self.textLabel.frame.size.width)/2, 0);
    self.textLabel.layer.cornerRadius = 12.f;
    self.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
    self.textLabel.numberOfLines = 0;
    self.textLabel.textAlignment = NSTextAlignmentCenter;
    [self.view addSubview:self.textLabel];

    //類方法建立的 pickerView
    self.apPickerView = [AUDatePicker pickerViewWithTitle:nil];
    self.apPickerView.delegate = self;
    self.apPickerView.tag = 1000;
    [self.view addSubview:self.apPickerView];
    [self.apPickerView show];

    //成員方法建立的 pickerView
    _apPickerView2 = [[AUDatePicker alloc]initWithFrame:CGRectMake(0, 200, 200, 200) withTitle:nil];
    _apPickerView2.delegate = self;
    _apPickerView2.tag = 1001;
    [self.view addSubview:_apPickerView2];

    //時間選取器 1
    self.apPickerView3 = [AUDatePicker pickerViewWithTitle:@"請選擇時間"];
    self.apPickerView3.tag = 1002;
    self.apPickerView3.isDatePicker = YES;
    NSDate * curretntDate = [NSDate date];
    NSDate * minxDate = [NSDate dateWithTimeInterval:-(3600*24*3000) sinceDate:curretntDate];
    NSDate * maxDate = [NSDate dateWithTimeInterval:3600*24*3000 sinceDate:curretntDate];
    [self.apPickerView3 setTimeDateminDate:minxDate MaxDate:maxDate];
    [self.apPickerView3 setCurrentDate:curretntDate];
    [self.view addSubview:self.apPickerView3];

    //時間選取器 2
    self.apPickerView4 = [AUDatePicker pickerViewWithTitle:@"請選擇時間"];
    self.apPickerView4.tag = 1003;
    self.apPickerView4.isDatePicker = YES;
    [self.apPickerView4 setTimeDateminDate:minxDate MaxDate:maxDate];
    [self.apPickerView4 setCurrentDate:curretntDate];
    NSDate * selectDate =[NSDate dateWithTimeInterval:3600*24*888 sinceDate:curretntDate];
    [self.apPickerView4 setAUDatePickerDate:selectDate animated:NO];
    [self.view addSubview:self.apPickerView4];


//    self.navigationItem.rightBarButtonItem = [APUtil getBarButtonWithTitle:RightBarButtonTitle target:self];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Button onClick
- (void)onBarButtonClick:(id)sender
{
}

- (void)onClick:(id)sender
{
    [self.apPickerView hide];
    [self.apPickerView2 hide];
    [self.apPickerView3 hide];
    [self.apPickerView4 hide];
    UISegmentedControl* segmentControl = (UISegmentedControl*)sender;

    switch (segmentControl.selectedSegmentIndex) {
        case 0:
            [self.apPickerView show];
            break;
        case 1:

            [self.apPickerView2 show];
            break;
        case 2:

            [self.apPickerView3 show];
            break;
        case 3:

            [self.apPickerView4 show];
            break;

        default:
            break;
    }
}


#pragma APPickerDelegate delegate
- (void)cancelPickerView:(AUDatePicker *)pickerView
{
    switch (pickerView.tag) {
        case 1000:
            [self.apPickerView hide];
            break;
        case 1001:
            [self.apPickerView2 hide];
            break;
        case 1002:
            [self.apPickerView3 hide];
            break;
        case 1003:
            [self.apPickerView4 hide];
            break;

        default:
            break;
    }
    [self.textLabel setText:@"點擊“取消”按鈕時的回調"];

}

- (void)selectedPickerView:(AUDatePicker *)pickerView
{
    NSInteger index = [pickerView.pickerView selectedRowInComponent:0];
    NSString *result = [self.yearArray objectAtIndex:index];

    index = [pickerView.pickerView selectedRowInComponent:1];
    result = [result stringByAppendingString:[NSString stringWithFormat:@"  %@",[self.monthArray objectAtIndex:index]]];

    index = [pickerView.pickerView selectedRowInComponent:2];
    result = [result stringByAppendingString:[NSString stringWithFormat:@"  %@",[self.nameArray objectAtIndex:index]]];

    [self.textLabel setText:result];
}

#pragma UIPickerView delegate
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    if (component == 0) {
        return [self.yearArray objectAtIndex:row];
    } else if (component == 1){
        return [self.monthArray objectAtIndex:row];
    } else {
        return [self.nameArray objectAtIndex:row];
    }
}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 3;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    if (component == 0) {
        return [self.yearArray count];
    } else if (component == 1){
        return [self.monthArray count];
    } else {
        return [self.nameArray count];
    }
}

@end