datepicker和textfields [英] datepicker and textfields
本文介绍了datepicker和textfields的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
.h文件
#import< UIKit / UIKit.h>
@interface DatePickerForTermins:UIViewController< UITextFieldDelegate>
{
// NSDate * frmDate;
UIActionSheet * dateSheet;
UIActionSheet * dateSheet2;
}
@property(弱,非原子)IBOutlet UITextField * fromDateTextField;
@property(weak,nonatomic)IBOutlet UITextField * toDateTextField;
@property(weak,nonatomic)IBOutlet UILabel * selectedFromDateLabel;
@property(weak,nonatomic)IBOutlet UILabel * chosenToDateLabel;
@property(weak,nonatomic)NSDate * frmDate;
@property(weak,nonatomic)NSDate * toDate;
- (void)setDateFRM;
- (void)dismissDateSet;
- (void)cancelDateSet;
- (void)setDateTO;
- (void)dismissDateSet2;
- (void)cancelDateSet2;
@end
和.m文件:
#importDatePickerForTermins.h
@interface DatePickerForTermins()
@end
@implementation DatePickerForTermins
@synthesize fromDateTextField;
@synthesize selectedFromDateLabel;
@synthesize frmDate;
@synthesize chosenToDateLabel;
@synthesize toDateTextField;
@synthesize toDate;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if(self){
//自定义初始化
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
//加载视图后执行任何其他设置。
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
//处理可以重新创建的任何资源。
}
- (void)setDateFRM
{
dateSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
[dateSheet setActionSheetStyle:UIActionSheetStyleDefault];
CGRect pickerFrame = CGRectMake(0,44,0,0);
UIDatePicker * frmDatePicker = [[UIDatePicker alloc] initWithFrame:pickerFrame];
[frmDatePicker setDatePickerMode:UIDatePickerModeDate];
[dateSheet addSubview:frmDatePicker];
UIToolbar * controlToolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0,0,dateSheet.bounds.size.width,44)];
[controlToolBar setBarStyle:UIBarStyleDefault];
[controlToolBar sizeToFit];
UIBarButtonItem * spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem * setButton = [[UIBarButtonItem alloc] initWithTitle:@Set Date样式:UIBarButtonItemStyleDone target:self action:@selector(dismissDateSet)];
UIBarButtonItem * cancelButton = [[UIBarButtonItem alloc] initWithTitle:@取消样式:UIBarButtonItemStyleBordered target:self action:@selector(cancelDateSet)];
[controlToolBar setItems:[NSArray arrayWithObjects:spacer,cancelButton,setButton,nil] animated:NO];
[dateSheet addSubview:controlToolBar];
[dateSheet showInView:self.view];
[dateSheet setBounds:CGRectMake(0,0,320,425)];
}
- (void)setDateTO
{
dateSheet2 = [[UIActionSheet alloc] initWithTitle:nil delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
[dateSheet2 setActionSheetStyle:UIActionSheetStyleDefault];
CGRect pickerFrame = CGRectMake(0,44,0,0);
UIDatePicker * frmDatePicker = [[UIDatePicker alloc] initWithFrame:pickerFrame];
[frmDatePicker setDatePickerMode:UIDatePickerModeDate];
[dateSheet2 addSubview:frmDatePicker];
UIToolbar * controlToolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0,0,dateSheet2.bounds.size.width,44)];
[controlToolBar setBarStyle:UIBarStyleDefault];
[controlToolBar sizeToFit];
UIBarButtonItem * spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem * setButton = [[UIBarButtonItem alloc] initWithTitle:@Set Date样式:UIBarButtonItemStyleDone target:self action:@selector(dismissDateSet2)];
UIBarButtonItem * cancelButton = [[UIBarButtonItem alloc] initWithTitle:@取消样式:UIBarButtonItemStyleBordered target:self action:@selector(cancelDateSet2)];
[controlToolBar setItems:[NSArray arrayWithObjects:spacer,cancelButton,setButton,nil] animated:NO];
[dateSheet2 addSubview:controlToolBar];
[dateSheet2 showInView:self.view];
[dateSheet2 setBounds:CGRectMake(0,0,320,425)];
}
- (void)cancelDateSet
{
[dateSheet dismissWithClickedButtonIndex:0 animated:YES];
}
- (void)cancelDateSet2
{
[dateSheet2 dismissWithClickedButtonIndex:0 animated:YES];
}
- (void)dismissDateSet
{
NSArray * listOfSubviews = [dateSheet subviews];
for(NSString * sre in listOfSubviews){
NSLog(@Lista Sub:%@,sre);
for(UIView * subView in listOfSubviews){
if([subView isKindOfClass:[UIDatePicker class]]){
self.frmDate = [(UIDatePicker *)subView date];
}
}
NSDateFormatter * dateFormater = [[NSDateFormatter alloc] init];
[dateFormater setDateFormat:@dd / MM / yyyy];
[fromDateTextField setText:[dateFormater stringFromDate:self.frmDate]];
// NSCalendar * calendar = [NSCalendar currentCalendar];
// unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
// NSDateComponents
NSString * outputStr = [NSString stringWithFormat:@From Datum je:%@,self.frmDate];
[self.chosenFromDateLabel setText:outputStr];
[dateSheet dismissWithClickedButtonIndex:0 animated:YES];
}
- (void)dismissDateSet2
{
NSArray * listOfSubviews = [dateSheet2 subviews];
(NSString * sre in listOfSubviews){
NSLog(@Lista Sub2:%@,sre);
}
for(UIView * subView in listOfSubviews){
if([subView isKindOfClass:[UIDatePicker class]]){
self.toDate = [(UIDatePicker *)subView date];
}
}
NSDateFormatter * dateFormater = [[NSDateFormatter alloc] init];
[dateFormater setDateFormat:@dd / MM / yyyy];
[toDateTextField setText:[dateFormater stringFromDate:self.toDate]];
// NSCalendar * calendar = [NSCalendar currentCalendar];
// unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
// NSDateComponents
NSString * outputStr = [NSString stringWithFormat:@From Datum je:%@,self.frmDate];
[self.chosenToDateLabel setText:outputStr];
[dateSheet2 dismissWithClickedButtonIndex:0 animated:YES];
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
[self setDateFRM];
返回NO;
}
@end
其他文本字段只是给出普通键盘而不是datepicker。任何人都知道如何实现这一点?
解决方案
使用addTarget在日期更改时收到消息。
示例:
[rmDatePicker addTarget:self action:@selector(datePickerValueChanged :) forControlEvents:UIControlEventValueChanged |;
...
- (void)datePickerValueChanged:(id)sender {
UIDatePicker * picker =(UIDatePicker *)sender;
NSDate dateFromPicker = picker.date;
fromDateTextField.text = [dateFromPicker description];
}
更多信息: UIKit中的目标动作
I am new to ios development and need to know how to set up two text fields which get dates from date pickers. Here's the code:
.h file
#import <UIKit/UIKit.h>
@interface DatePickerForTermins : UIViewController<UITextFieldDelegate>
{
//NSDate *frmDate;
UIActionSheet *dateSheet;
UIActionSheet *dateSheet2;
}
@property (weak, nonatomic) IBOutlet UITextField *fromDateTextField;
@property (weak, nonatomic) IBOutlet UITextField *toDateTextField;
@property (weak, nonatomic) IBOutlet UILabel *chosenFromDateLabel;
@property (weak, nonatomic) IBOutlet UILabel *chosenToDateLabel;
@property (weak, nonatomic) NSDate *frmDate;
@property (weak, nonatomic) NSDate *toDate;
-(void)setDateFRM;
-(void)dismissDateSet;
-(void)cancelDateSet;
-(void)setDateTO;
-(void)dismissDateSet2;
-(void)cancelDateSet2;
@end
and .m file:
#import "DatePickerForTermins.h"
@interface DatePickerForTermins ()
@end
@implementation DatePickerForTermins
@synthesize fromDateTextField;
@synthesize chosenFromDateLabel;
@synthesize frmDate;
@synthesize chosenToDateLabel;
@synthesize toDateTextField;
@synthesize toDate;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)setDateFRM
{
dateSheet=[[UIActionSheet alloc]initWithTitle:nil delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
[dateSheet setActionSheetStyle:UIActionSheetStyleDefault];
CGRect pickerFrame=CGRectMake(0, 44, 0, 0);
UIDatePicker *frmDatePicker=[[UIDatePicker alloc]initWithFrame:pickerFrame];
[frmDatePicker setDatePickerMode:UIDatePickerModeDate];
[dateSheet addSubview:frmDatePicker];
UIToolbar *controlToolBar=[[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, dateSheet.bounds.size.width, 44)];
[controlToolBar setBarStyle:UIBarStyleDefault];
[controlToolBar sizeToFit];
UIBarButtonItem *spacer=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *setButton=[[UIBarButtonItem alloc]initWithTitle:@"Set Date" style:UIBarButtonItemStyleDone target:self action:@selector(dismissDateSet)];
UIBarButtonItem *cancelButton=[[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelDateSet)];
[controlToolBar setItems:[NSArray arrayWithObjects:spacer,cancelButton,setButton, nil]animated:NO];
[dateSheet addSubview:controlToolBar];
[dateSheet showInView:self.view];
[dateSheet setBounds:CGRectMake(0, 0, 320, 425)];
}
-(void)setDateTO
{
dateSheet2=[[UIActionSheet alloc]initWithTitle:nil delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
[dateSheet2 setActionSheetStyle:UIActionSheetStyleDefault];
CGRect pickerFrame=CGRectMake(0, 44, 0, 0);
UIDatePicker *frmDatePicker=[[UIDatePicker alloc]initWithFrame:pickerFrame];
[frmDatePicker setDatePickerMode:UIDatePickerModeDate];
[dateSheet2 addSubview:frmDatePicker];
UIToolbar *controlToolBar=[[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, dateSheet2.bounds.size.width, 44)];
[controlToolBar setBarStyle:UIBarStyleDefault];
[controlToolBar sizeToFit];
UIBarButtonItem *spacer=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *setButton=[[UIBarButtonItem alloc]initWithTitle:@"Set Date" style:UIBarButtonItemStyleDone target:self action:@selector(dismissDateSet2)];
UIBarButtonItem *cancelButton=[[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelDateSet2)];
[controlToolBar setItems:[NSArray arrayWithObjects:spacer,cancelButton,setButton, nil]animated:NO];
[dateSheet2 addSubview:controlToolBar];
[dateSheet2 showInView:self.view];
[dateSheet2 setBounds:CGRectMake(0, 0, 320, 425)];
}
-(void)cancelDateSet
{
[dateSheet dismissWithClickedButtonIndex:0 animated:YES];
}
-(void)cancelDateSet2
{
[dateSheet2 dismissWithClickedButtonIndex:0 animated:YES];
}
-(void)dismissDateSet
{
NSArray *listOfSubviews=[dateSheet subviews];
for (NSString *sre in listOfSubviews) {
NSLog(@"Lista Sub:%@",sre);
}
for (UIView *subView in listOfSubviews) {
if([subView isKindOfClass:[UIDatePicker class]]){
self.frmDate=[(UIDatePicker*)subView date];
}
}
NSDateFormatter *dateFormater=[[NSDateFormatter alloc]init];
[dateFormater setDateFormat:@"dd/MM/yyyy"];
[fromDateTextField setText:[dateFormater stringFromDate:self.frmDate]];
// NSCalendar *calendar=[NSCalendar currentCalendar];
// unsigned unitFlags= NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
// NSDateComponents
NSString *outputStr=[NSString stringWithFormat:@"From Datum je:%@",self.frmDate];
[self.chosenFromDateLabel setText:outputStr];
[dateSheet dismissWithClickedButtonIndex:0 animated:YES];
}
-(void)dismissDateSet2
{
NSArray *listOfSubviews=[dateSheet2 subviews];
for (NSString *sre in listOfSubviews) {
NSLog(@"Lista Sub2:%@",sre);
}
for (UIView *subView in listOfSubviews) {
if([subView isKindOfClass:[UIDatePicker class]]){
self.toDate=[(UIDatePicker*)subView date];
}
}
NSDateFormatter *dateFormater=[[NSDateFormatter alloc]init];
[dateFormater setDateFormat:@"dd/MM/yyyy"];
[toDateTextField setText:[dateFormater stringFromDate:self.toDate]];
// NSCalendar *calendar=[NSCalendar currentCalendar];
// unsigned unitFlags= NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
// NSDateComponents
NSString *outputStr=[NSString stringWithFormat:@"From Datum je:%@",self.frmDate];
[self.chosenToDateLabel setText:outputStr];
[dateSheet2 dismissWithClickedButtonIndex:0 animated:YES];
}
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
[self setDateFRM];
return NO;
}
@end
The other text field just gives the plain keyboard instead of datepicker. Anybody know how to accomplish this?
解决方案
Use "addTarget" to get a message when the dates was changed.
Example:
[rmDatePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged|;
...
-(void) datePickerValueChanged:(id) sender {
UIDatePicker *picker = (UIDatePicker*)sender;
NSDate dateFromPicker = picker.date;
fromDateTextField.text = [dateFromPicker description];
}
More infos: Target-Action in UIKit
这篇关于datepicker和textfields的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文