用UIDatePickerreplaceUITextFieldinput

我有一个表格视图控制器(其中包括)代表一个date的单元格。 我跟着这篇文章“ 如何制作只覆盖一半屏幕的模式dateselect器? ”,而且我有一个很大的例外 – 我不能让select器消失!

我尝试注册事件UIControlEventTouchUpOutside,但似乎这不是由select器(或至less在我使用它的模式)生成的。

我怎样才能认识到用户已经完成selectdate?

此外,有没有办法禁用用户直接input到UITextField? 我想强迫他们使用选取器。 我看到这个post“ 禁用UITextField中的闪烁光标? ”,但有另一种方式吗?

Reagards,

– 约翰

试试这个代码..在这里我把一个dateselect器到uitextfield ..它将在右上angular的导航栏完成button..所以通过点击完成我会用户可以解雇datepicker ..另一个最好的方法是把一个工具栏上方的dateselect器完成button..试试这个将工作..当更改dateselect器,你可以填充文本字段..希望这会有所帮助..

看到这个计算器链接https://stackoverflow.com/a/4824319/763747这将具有完成button作为keybord上方的工具栏的datepicker ..

#pragma mark - #pragma mark - TextField Delegate - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return TRUE; } - (void) textFieldDidBeginEditing:(UITextField *)textField { itsRightBarButton.title = @"Done"; itsRightBarButton.style = UIBarButtonItemStyleDone; itsRightBarButton.target = self; itsRightBarButton.action = @selector(doneAction:); if ([textField isEqual:itsIncidentDateTextField]) { itsDatePicker = [[[UIDatePicker alloc] init] autorelease]; itsDatePicker.datePickerMode = UIDatePickerModeDate; [itsDatePicker addTarget:self action:@selector(incidentDateValueChanged:) forControlEvents:UIControlEventValueChanged]; //datePicker.tag = indexPath.row; textField.inputView = itsDatePicker; } } - (IBAction) incidentDateValueChanged:(id)sender{ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"MMM d, yyyy"]; itsIncidentDateTextField.text = [dateFormatter stringFromDate:[itsDatePicker date]]; [dateFormatter release]; } 

我用一种不同的方法消失了UIDatePicker。

创build一个XIB(nib)文件,并添加一个UIDatePicker,然后调整视图的大小,使其只适合UIDatePicker,在你的ViewController(或者你使用的任何类,当然也可以合成)中创build一个属性(使其强壮和非primefaces)。

 @property (nonatomic, strong) UIView *myDatePickerView; @synthesize myDatePickerView; 

然后创build一个loadDatePickerView方法

 - (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]; } 

实现UITextFieldDelegate,并在textFieldDidBeginEditing方法中调用loadDatePickerView方法

 [self loadDatePickerView]; 

使函数创build一个属性,这是一个UIDatePicker实例

 @property (nonatomic,strong) UIDatePicker *myDatePicker; 

(当然合成)

现在创build一个IBAction,如下所示:

 -(IBAction)datePickerValueChanged:(UIDatePicker *)sender { myDatePicker = [[myDatePickerView subviews] lastObject]; //now you can do whatever you want with the DatePicker } 

现在将IBAction连接到XIB文件中的select器,这样XIB现在就是你在VC中创build的UIDatePicker实例,如果你想让它消失,你可以添加一个UITapGestureRecognizer(在ViewDidLoad中) ,select器将是另一个IBAction从它的'superView中删除myDatePickerView像这样:

 - (void)viewDidLoad { [super viewDidLoad]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dropPicker:)]; [self.view addGestureRecognizer:tap]; [self datePickerValueChanged:myDatePicker]; } -(IBAction)dropPicker:(id)sender { [myDatePickerView removeFromSuperview]; }