datepicker和textfields [英] datepicker and textfields

查看:156
本文介绍了datepicker和textfields的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很喜欢ios开发,需要知道如何设置两个从日期选择器获取日期的文本字段。以下是代码:



.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆