正如您从我的问题可以理解的那样,我无法获取UITextField(其中2个具有UIDatePicker的inputView,1正常)将文本更改为UIDatePicker(XIB文件)中选择的日期。
到目前为止,我设法在敲击文本字段时显示datePicker(并在敲击视图时将其删除,但是我无法让textField将其文本更改为UIDatePicker的日期。
这是我的.m文件:
#import "ViewController.h"
#define kNIBname @"MyDatePickerView"
@interface ViewController ()<UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UITextField *myTF;
@property (weak, nonatomic) IBOutlet UITextField *myOtherTF;
@property (nonatomic, strong) UIView *myDatePickerView;
@property (nonatomic,strong) UIDatePicker *MyDatePicker;
@end
@implementation ViewController
@synthesize myTF,myOtherTF,MyDatePicker,myDatePickerView;
- (void)viewDidLoad{
[super viewDidLoad];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dropPicker:)];
[self.view addGestureRecognizer:tap];
[self datePickerValueChanged:MyDatePicker];
MyDatePicker = [[myDatePickerView subviews] lastObject];
[MyDatePicker setDatePickerMode: UIDatePickerModeDate];
[MyDatePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
[myTF setInputView:myDatePickerView];
[myOtherTF setInputView:myDatePickerView];
// Do any additional setup after loading the view, typically from a nib.
}
-(IBAction)dropPicker:(id)sender{
[myDatePickerView removeFromSuperview];
[self.view endEditing:YES];
}
- (void) loadDatePickerView{
UINib *nib = [UINib nibWithNibName:kNIBname bundle:[NSBundle mainBundle]];
NSArray *views = [nib instantiateWithOwner:self options:nil];
self.myDatePickerView = [views firstObject];
[myDatePickerView setFrame:CGRectMake(0, 318, 320, 162)];
[self.view addSubview:myDatePickerView];
}
-(IBAction)datePickerValueChanged:(UIDatePicker *)sender{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:sender.locale];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
}
-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField{
if(textField == myTF || textField == myOtherTF){
[self loadDatePickerView];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setLocale:[MyDatePicker locale]];
[df setDateStyle:NSDateFormatterMediumStyle];
[self datePickerValueChanged:MyDatePicker];
[textField setText:[df stringFromDate:[MyDatePicker date]]];
return NO;
} else {
return YES;
}
}
@end
最佳答案
如果我正确阅读了此内容,则说明您使用错误的方法设置了日期。在开始编辑文本字段之前,仅调用一次textFieldShouldBeginEditing
。您想要的是在datePickerValueChanged
方法中设置textField文本,因为这是您每次选择日期时都会触发的文本。