cocoa提供了UIDatePicker控件,但是對于程序員而言并不友好。其糟糕之處,莫過于無法指定其frame,它的大小固定為320*216(占據(jù)了近整個iphone屏幕的一半),導致在UI設計時很難安排下這個“巨大”的東西。我們自定義的日期挑選控件是這樣的。它默認情況下顯示為一個textfield,以文本的方式顯示日期,當你試圖編輯它時,會彈出一個足夠巨大的UIDatePicker控件:

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

自定義日期挑選控件

系統(tǒng) 1708 0

<!--StartFragment-->

cocoa提供了UIDatePicker控件,但是對于程序員而言并不友好。其糟糕之處,莫過于無法指定其frame,它的大小固定為320*216(占據(jù)了近整個iphone屏幕的一半),導致在UI設計時很難安排下這個“巨大”的東西。

我們自定義的日期挑選控件是這樣的。

它默認情況下顯示為一個 textfield,以文本的方式顯示日期,當你試圖編輯它時,會彈出一個足夠巨大的UIDatePicker控件:

自定義日期挑選控件 自定義日期挑選控件

<!--StartFragment-->

轉動日期時,其實 textfield中的值會作相應改變。選擇好日期后,點擊左上角的關閉按鈕關閉這個UIDatePicker。

這個控件的使用非常簡單。

通常只需要通過下面的代碼構造它并 addSubview就可以了:

DatePicker * dp=[[ DatePicker alloc ] initWithFrame : CGRectMake ( 10 , 25 , 220 , 35 )];

[ self . view addSubview :dp];

如果想改變 DatePicker的樣式,比如顯示時間而不是日期,可以修改其datePickerMode和dateFormatter屬性:

dp. datePickerMode = UIDatePickerModeTime ;

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

[df setDateFormat : @"HH:mm:ss" ];

dp. dateFormatter =df;

如果要獲取控件的日期時間值和字符串值,則可以使用控件的 date屬性和textField.text屬性。

全部的源代碼在這里:

============ DatePicker.h===========

@interface DatePicker : UIView

<UITextFieldDelegate>{

UITextField * textField ; // 文本框

UIDatePicker * datePicker ; // 日期選擇控件

NSDateFormatter * dateFormatter ; // 日期格式

UIDatePickerMode datePickerMode ; // 日期控件顯示風格

NSDate * date ;

UIView * subview ;

}

@property ( nonatomic ) UIDatePickerMode datePickerMode;

//@property(nonatomic,retain)UITextField* textField;

@property ( nonatomic , retain )NSDateFormatter* dateFormatter;

@property ( nonatomic , retain )NSDate* date;

//@property(nonatomic,retain)UIDatePicker* datePicker;

-( UIDatePickerMode )datePickerMode;

-( void )setDatePickerMode:( UIDatePickerMode )mode;

-( NSDateFormatter *)dateFormatter;

-( void )setDateFormatter:( NSDateFormatter *)df;

-( NSDate *)date;

-( void )setDate:( NSDate *)d;

-( UITextField *)textField;

-( UIDatePicker *)datePicker;

@end

============== DatePicker.m==============

#import "DatePicker.h"

@implementation DatePicker

-( UIDatePicker *)datePicker

{

return datePicker ;

}

-( UITextField *)textField

{

return textField ;

}

-( NSDate *)date

{

return date ;

}

-( void )setDate:( NSDate *)d

{

date =d;

datePicker . date = date ;

}

-( NSDateFormatter *)dateFormatter

{

return dateFormatter ;

}

-( void )setDateFormatter:( NSDateFormatter *)df{

dateFormatter =df;

textField . text =[ dateFormatter stringFromDate : date ];

}

-( UIDatePickerMode )datePickerMode

{

return datePickerMode ;

}

-( void )setDatePickerMode:( UIDatePickerMode )mode{

datePickerMode =mode;

datePicker . datePickerMode = datePickerMode ;

}

- ( id )initWithFrame:( CGRect ) frame {

if (( self = [ super initWithFrame : frame ])) {

// 默認日期格式為 yyyy-MM-dd

dateFormatter = [[ NSDateFormatter alloc ] init ];

[ dateFormatter setLocale :[[ NSLocale alloc ] initWithLocaleIdentifier : @"zh_CN" ]]; //location 設置為中國

[ dateFormatter setDateFormat : @"yyyy-MM-dd" ];

//picker 的默認時間為當前時間

date =[ NSDate date ];

//picker 的默認 style 為只顯示日期

datePickerMode = UIDatePickerModeDate ;

// 構造一個子視圖 , 用于顯示日期選擇器

subview =[[ UIView alloc ] initWithFrame : CGRectMake ( 0 , 0 , 320 , 480 )];

subview . backgroundColor =[ UIColor clearColor ];

subview . tag = 0 ;

// 為子視圖構造工具欄按鈕

UIBarButtonItem * item = [[[ UIBarButtonItem alloc ]

initWithBarButtonSystemItem : UIBarButtonSystemItemStop

target : self action : @selector ( btnCloseClick )] autorelease ];

NSArray * buttons=[ NSArray arrayWithObjects :item, nil ];

// 為子視圖構造工具欄

UIToolbar *subToolbar=[[ UIToolbar alloc ] initWithFrame : CGRectMake ( 0 , 0 , 320 , 44 )];

subToolbar. barStyle = UIBarStyleBlackTranslucent ;

[subToolbar sizeToFit ];

[subToolbar setItems :buttons animated : YES ]; // 把按鈕加入工具欄

[ subview addSubview :subToolbar]; // 把工具欄加入子視圖

[subToolbar release ];

// 為子視圖構造 datePicker

datePicker =[[ UIDatePicker alloc ] init ];

[ datePicker setDate : date ];

datePicker . frame = CGRectMake ( 0 , 44 , 320 , 216 );

datePicker . datePickerMode = datePickerMode ;

// 指定 datepicker valueChanged 事件

[ datePicker addTarget : self action : @selector ( dateChanged :) forControlEvents : UIControlEventValueChanged ];

[ subview addSubview : datePicker ]; // datePicker 加入子視圖

// 上面是子視圖,下面是父視圖

// 文本框

textField =[[ UITextField alloc ] initWithFrame : frame ];

textField . delegate = self ;

// textField.enabled=NO;

textField . borderStyle = UITextBorderStyleRoundedRect ;

textField . text =[ dateFormatter stringFromDate : date ];

[ self addSubview : textField ];

}

return self ;

}

// datepicker 的值改變時觸發(fā)

-( void )dateChanged:( id )sender{

date = [sender date ]; // 獲取 datepicker 的日期

// 改變 textField的值

textField . text =[ NSString stringWithString :

[ dateFormatter stringFromDate : date ]];

}

// 關閉按鈕點擊時觸發(fā)

-( void )btnCloseClick{

if ( subview != nil ){

subview . tag = 0 ;

[ subview removeFromSuperview ];

}

}

- ( void )dealloc {

[ textField release ];

[ date release ];

[ dateFormatter release ];

[ datePicker release ];

[ subview release ];

[ super dealloc ];

}

#pragma mark textField delegate method

// textField 被點擊時觸發(fā)

-( BOOL )textFieldShouldBeginEditing:( UITextField *) textField {

if ( subview . tag == 0 ) { // tag 標志等于 0 ,說明 datepicker 未顯示

// tag 標志為 1 ,并顯示子視圖

subview . tag = 1 ;

[ self . superview addSubview : subview ];

}

return NO ;

}

@end

<!--EndFragment-->

<!--EndFragment-->

自定義日期挑選控件


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 上蔡县| 天峻县| 中宁县| 财经| 万盛区| 唐山市| 根河市| 湖南省| 广丰县| 金山区| 霍林郭勒市| 富平县| 仁寿县| 池州市| 交口县| 平乐县| 泗阳县| 古浪县| 晋江市| 江山市| 秦皇岛市| 区。| 威宁| 固始县| 西和县| 建昌县| 唐河县| 渭南市| 东乡| 英吉沙县| 龙里县| 密云县| 漳州市| 香港 | 巴青县| 桃源县| 遵义县| 白朗县| 江北区| 龙陵县| 临沭县|