IOS日期选择器像弹出键盘function?
考虑具有8个文本字段条目和4个日期字段条目的数据输入表单(可滚动视图),是否可以在底部通常(以及键盘弹出的方式)呈现日期选择器,具体取决于哪个文本用户点击的字段?
我想你可以用代码模态地提供一个日期选择器,但它似乎提供了一个日期选择器,就像键盘被调用一样,并且呈现的内容将是SDK内置的,或者我错过了什么? (在nib编辑器中设置一个属性,告诉视图该文本字段接受日期,并为各种键盘提供日期选择器选项)
我很清楚为什么当声明的日期字段获得焦点时,开发人员没有简单的方法来“弹出”日历或日期选择器。
你知道的任何示例应用程序或教程可以指向我吗?
我刚刚研究了同样的问题,虽然网络充满了第三方库和棘手的黑客,但实际上有一种非常简单,可能是首选的方式来完成你所追求的目标。
首先,它利用了UITextField
inputView
和input accessoryView
属性提供的function,这些function共同提供了无限的自定义function。 我的问题变得知道如何构建事物以获得我想要的东西。 我建议在这里阅读它们:
因此,我开始声明两个属性:
@property (nonatomic, strong) UIDatePicker *datePicker; @property (nonatomic, strong) UIView *datePickerToolbar;
然后使用以下内容创建每个:
- (UIView*)datePickerToolbar { if (!_datePickerToolbar) { UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; toolbar.barStyle = UIBarStyleBlack; UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(datePickerCanceled:)]; UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(datePickerDone:)]; UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; [toolbar setItems:[NSArray arrayWithObjects:cancelButton, space, doneButton, nil] animated:NO]; _datePickerToolbar = toolbar; } return _datePickerToolbar; } - (UIDatePicker*)datePicker { if (!_datePicker) { UIDatePicker *datePicker = [[UIDatePicker alloc] init]; datePicker.datePickerMode = UIDatePickerModeDate; datePicker.date = [NSDate date]; _datePicker = datePicker; } return _datePicker; }
当然,您可以自定义这些视图以满足您的需求。 但是,由于这些视图是您自己的,因此您还需要确定工具栏中的每个按钮应如何处理交互。 虽然两者都应该关闭“键盘”(通过辞职第一响应者来完成),但在我的情况下,我还希望完成按钮将日期输入字段设置为所选日期的格式化字符串:
- (void)datePickerCanceled:(id)sender { // just resign focus and dismiss date picker [self.dateOfBirthField resignFirstResponder]; } - (void)datePickerDone:(id)sender { NSDate *selectedDate = self.datePicker.date; // format date into string NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; // format overall string NSString *dateString = [dateFormatter stringFromDate:selectedDate]; self.dateInputField.text = dateString; [self.dateOfBirthField resignFirstResponder]; }
之后,触发我们键盘替换的唯一办法是将我们的自定义视图分配给我之前提到过的那些属性UITextField
属性,我选择在’ViewDidLoad`中做这些属性:
- (void)viewDidLoad { [super viewDidLoad]; self.dateInputField.inputView = self.datePicker; self.dateInputField.inputAccessoryView = self.datePickerToolbar; }
我希望这就是你要找的东西。 在看到所有内容之后,我确信这是最简单,最易于管理的方式。 我也喜欢这种方法,因为它可以很容易地修改和改变用途,以满足不同的输入要求。
在我看来,这是一个隐藏的gem。