考虑到具有8个文本字段条目和4个日期字段条目的数据输入表单(可滚动视图),是否有可能在底部的正常位置(以及弹出键盘的方式)显示日期选择器,具体取决于哪个文本用户利用的领域?
我想您可以用代码模态地显示日期选择器,但是似乎可以像调用键盘和显示键盘一样显示日期选择器,这将是SDK的内置功能,还是我遗漏了什么? (在笔尖编辑器中设置一个属性,以告知视图该文本字段接受日期,并为您提供日期选择器选项以及各种键盘)
这让我惊讶,为什么当声明的日期字段成为焦点时,开发人员没有一种简单的方法来“弹出”日历或日期选择器。
您知道的任何示例应用程序或教程都可以指向我吗?
最佳答案
我只是研究了这个问题,尽管网络上充斥着第三方图书馆和棘手的黑客,但实际上,这是一种非常简单的方法,可能是您追求的目标的首选方法。
首先,它利用了UITextField
inputView
和input accessoryView
属性提供的功能,它们共同提供了无限的自定义可能性。对我来说,问题就变成了知道如何构造事物来获得我想要的东西。我建议在这里阅读有关它们的信息:
https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/InputViews/InputViews.html
因此,我首先声明了两个属性:
@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;
}
我希望这是您想要的。看完所有内容后,我确信这是最简单,最易管理的方法。我也喜欢这种方法,因为可以轻松地对其进行修改和重新调整用途,以适应不同的输入需求。
我认为这是一颗隐藏的宝石。
关于ios - 像弹出式键盘功能一样的iOS日期选择器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17901088/