【问题标题】:iOS DatePicker data into textfieldiOS DatePicker 数据到文本字段
【发布时间】:2014-05-09 10:17:45
【问题描述】:

我正在开发一个具有 3 个文本字段和一个 UIDatePicker 的 iOS 应用程序。

当我在 DatePicker 中选择一个时间时,我应该在 TextField 上显示它,但我无法让它工作。

这是我的文件:

Login.h

#import <UIKit/UIKit.h>


@interface Login : UIViewController<UIPickerViewDelegate>
{

}

@property (weak) IBOutlet UILabel * label;



@property (weak) IBOutlet UITextField * username;
@property (weak) IBOutlet UITextField * password;
@property (weak) IBOutlet UITextField * birth;
@property (weak) IBOutlet UIButton * entrar;
@property (weak) IBOutlet UIDatePicker * data;

@property (strong, nonatomic) NSDate *dateOfBirth;
@property (strong, nonatomic) NSDateFormatter * dateFormatter;


@property (strong, nonatomic) NSString * etiqueta;
@property (strong, nonatomic) NSString * eti;
@property (strong, nonatomic) NSString * dates;

-(id) initWithBirth: (NSDate *) dateOfBirth;
-(IBAction) displayDate: (id) sender;



@end

Login.m

   #import "Login.h"


@interface Login()
@end

@implementation Login

-(void) viewdDidLoad{

     [super viewDidLoad];
    _eti=@"";
    self.label.text=self.eti;
    _etiqueta = @"Introdueix el teu nom d'usuari, la contrasenya, i la teva data de naixement";
    self.label.text = self.etiqueta;

    self.data = [[UIDatePicker alloc] init];
    [_data setDate:[NSDate date]];
    [self.data addTarget:self action:@selector(updateTextField:)  forControlEvents:UIControlEventValueChanged];
    [self.birth setInputView:_data];

    self.data.datePickerMode = UIDatePickerModeDate;
    self.data.hidden = NO;
    self.data.date = [NSDate date];
    self.dateFormatter = [[NSDateFormatter alloc] init];
    self.dateFormatter.dateStyle = NSDateFormatterLongStyle;
    [self.view addSubview:self.data];


    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                action:@selector(dismissKeyboard)];

    [self.view addGestureRecognizer:tap];

    NSDate * now = [NSDate date];
    [_data setDate:now animated:YES];
    _birth.text = [now description];

    [self.dateFormatter stringFromDate: _dateOfBirth];

}

-(void)datePickerDidChangeDate:(id)sender
{
    NSLog(@"%@",self.data.date);
    self.birth.text=[NSString stringWithFormat:@"%@",self.data.date.description];
}


-(NSString *)formatDate:(NSDate *) date
{
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateStyle: NSDateFormatterShortStyle];
    [dateFormatter setDateFormat:@"MM'/'dd'/'yyyy"];
    NSString * formattedDate = [dateFormatter stringFromDate: date];
    return formattedDate;

    //NSDate *yesterdaydate=[NSDate dateWithTimeIntervalSinceNow:obj];
}

-(void)dismissKeyboard {
    [_username resignFirstResponder];
    [_password resignFirstResponder];
    [_birth resignFirstResponder];
}


-(id) initWithBirth:(NSDate *)dateOfBirth
{
    if (self = [super init]){
        _dateOfBirth = dateOfBirth;
    }
    return self;

}

-(IBAction) displayDate:(id)sender{
    NSDate * selected = [_data date];
    NSString * dates = [selected description];
    _birth.text = dates;
}


-(IBAction) selector:(id)sender
{
    if (_username.text.length == 0 || _password.text.length == 0 || _birth.text.length == 0)
    {
        [[[UIAlertView alloc] initWithTitle:@"Alerta!"
                                    message:@"Algun camp està buit!"
                                    delegate: nil
                          cancelButtonTitle:@"Cancelar"
                          otherButtonTitles:nil
          ] show];
    }

    else{
        [self performSegueWithIdentifier: @"Menu" sender:self];

    }

}

@结束

谁能帮我弄清楚如何解决这个问题?

编辑:另外,我想知道如何编写一个“if”方法来检查输入的日期是否早于今天,即您输入的是 5 月 9 日而不是 5 月 8 日。

类似于“如果日期

非常感谢。

【问题讨论】:

  • 你没有初始化你的日期选择器...
  • 尝试删除UILabel *label; UIDatePicker *data;这一行并将所有“data”更改为_data。看来您使用的是未初始化的变量而不是您的实际日期选择器。

标签: ios datepicker uitextfield


【解决方案1】:

在 viewdidload 方法中试试这个

self.pickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 250, 325, 300)];
            [self.pickerView addTarget:self action:@selector(datePickerDidChangeDate:)  forControlEvents:UIControlEventValueChanged];
            self.pickerView.datePickerMode = UIDatePickerModeDate;
            self.pickerView.hidden = NO;
            self.pickerView.date = [NSDate date];
            self.formatter = [[NSDateFormatter alloc] init];
            self.formatter.dateStyle = NSDateFormatterLongStyle;
            [self.view addSubview:self.pickerView];

-(void)datePickerDidChangeDate:(id)sender
{
    NSLog(@"%@",self.pickerView.date);
  self.textField.text=[NSString stringWithFormat:@"%@",self.pickerView.date.description];    }

【讨论】:

  • 感谢您的洞察力,但它似乎没有多大贡献:我确实点击了日期选择器,但它似乎没有反应并将信息移动到文本字段。
  • 您最近的编辑为我提供了答案:现在可以了!非常感谢您的帮助。
  • 如果问题的答案没有在任何地方使用,为什么还要指定日期格式化程序?它可能会导致混乱。 Smb 可能认为正确的日期显示和搜索需要它来了解它在哪里使用 :) 而不是。
【解决方案2】:

在您的viewDidLoad 中有“数据”,我没有看到该对象的任何初始化。 我认为displaydate: 应该更新您的文本字段?又是“数据”,我看不出它是从哪里来的,我认为它是你定义的全局?你不应该那样做。你使用描述,你也不应该那样做。来自文档:

(用于描述方法)

讨论 该表示仅对调试有用。

有许多选项可以获取日期的格式化字符串 包括:日期格式化程序(参见 NSDateFormatter 和数据格式化 指南),以及 NSDate 方法 descriptionWithLocale:, dateWithCalendarFormat:timeZone:, 和 descriptionWithCalendarFormat:timeZone:locale:

您应该使用[self.dateFormatter stringFromDate:] 来获取您的日期的字符串表示形式。如果你使用 getter 和 setter 的属性,利用它们,它可以简化你的开发过程。例如,您可以更新日期属性设置器中的文本字段。请随时要求更多说明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    相关资源
    最近更新 更多