我有一个UITextField
的视图,需要在按下按钮时显示UIDatePicker
(它隐藏在键盘下方)。
我懒得实例化日期选择器,因为这样可以让我更快地显示视图。
这是与点击按钮相关联的代码:
- (IBAction)hideKeyboard {
if (!self.datePicker) {
// UIDatePicker allocation and initialization
self.datePicker = ...
...
[self.view addSubview:self.datePicker];
}
[self.textField resignFirstResponder];
}
这会干扰键盘隐藏动画。实际上根本没有动画。
我的另一个线索是,这不会发生在模拟器上,而只会发生在实际设备上(iPhone 4S)。
我该如何解决这个问题?
修改:
将datePicker设置为textField的inputView
并不能解决我的问题。
答案 0 :(得分:1)
我可以向您推荐另一种解决方案,然后隐藏键盘并使用按钮显示日期选择器。
如果我理解正确你想要在用户点击文本字段时显示日期选择器,然后你可以在文本字段中设置日期。
UITextField有一个属性
@property(readwrite,retain)UIView * inputView
如果将inputView属性设置为日期选择器,则文本字段将显示日期选择器而不是键盘(甚至可以像键盘一样使用动画)。
当然,这些值需要自己设置并设置为textfield。
编辑原因:编辑问题
我不知道为什么将datepicker设置为输入视图没有帮助。无论如何,如果您不想显示键盘并通过添加子视图显示日期选择器,您可以使用以下UITextField的委托方法
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
实现委托方法。在该方法中,只需将pickerview作为子视图添加到视图中,并返回NO以不显示键盘。
编辑原因:推荐
你有没有理由不使用textfield?如果不是我会使用它,因为它使一切更容易。如果您想出于某种原因使用UILabel,那么您可以观看键盘通知。键盘何时消失,然后显示日期选择器。
对于键盘通知,请参考此处,使用示例代码进行了解释,UIKeyboardDidHideNotification可以帮助您
答案 1 :(得分:0)
非常简单:
只需添加日期选择器对象作为文本字段的输入值。无需显示/隐藏键盘。
UIDatePicker *datePicker = [[UIDatePicker alloc] init];
NSCalendar *calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar] ;
NSDate *currentDate = [NSDate date];
NSDateComponents *comps = [[NSDateComponents alloc] init] ;
[comps setYear:anyInteger];
NSDate *maximumDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
[comps setYear:anyInteger;
NSDate *minimumDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
[datePicker setMaximumDate:maximumDate];
[datePicker setMinimumDate:minimumDate];
datePicker.datePickerMode = UIDatePickerModeDate;
textField.inputView = datePicker;