Ios8 UIDatePicker在iOS 8中不可见
我对日期选择器有一个问题,即Ios8 UIDatePicker在iOS 8中不可见,ios8,Ios8,我对日期选择器有一个问题,即UIDatePicker在除iOS 8之外的所有版本中都工作正常 代码: 我在iOS模拟器上也看到了同样的问题——在iOS 7中工作,但在iOS 8中没有。要解决这个问题,请选择iOS模拟器的硬件菜单,然后选择键盘->切换软件键盘。在Xcode 6.0.1中,这对我来说是一个模拟器问题。这在设备(iPhone4S和iOS8发行版)上有效。如前一位用户所述,以下步骤使日期选择器在iOS 8模拟器上对我可见 启动模拟器和应用程序,并单击以日期选择器作为输入视图的字段 现
UIDatePicker
在除iOS 8之外的所有版本中都工作正常
代码:
我在iOS模拟器上也看到了同样的问题——在iOS 7中工作,但在iOS 8中没有。要解决这个问题,请选择iOS模拟器的硬件菜单,然后选择键盘->切换软件键盘。在Xcode 6.0.1中,这对我来说是一个模拟器问题。这在设备(iPhone4S和iOS8发行版)上有效。如前一位用户所述,以下步骤使日期选择器在iOS 8模拟器上对我可见
- 启动模拟器和应用程序,并单击以日期选择器作为输入视图的字段
- 现在按下CMD+K(硬件->键盘->切换软件键盘),日期选择器变为可见
同样,这是一个仅限于模拟器的问题,该问题没有在设备上出现。我也遇到了这个问题,现在我通过以下两种不同的方法解决了这个问题: 1) 。我没有使用
UIActionSheet
,而是使用了定制的UIView
。只是将日期选择器添加到视图中,并显示和取消。也请参阅此
2) 。我已经检查了以下条件:如果操作系统版本大于8.0,如果没有,我使用了UIActionSheet
和elseUIAlertViewController
。将选择器控制器添加为子视图
id ageActionSheet;
if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
{
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction *alertAction = [UIAlertAction actionWithTitle:@"" style:UIAlertActionStyleDefault handler:nil];
[alertController addAction:alertAction];
[alertController addAction:alertAction];
[alertController addAction:alertAction];
[alertController addAction:alertAction];
ageToolbar.frame = CGRectMake(-8,0, 320, 45);
ageTitleLbl.frame = CGRectMake(50, 3, 200, 40);
picker.frame = CGRectMake(-20, 45, 360, frame.size.height - 50 );
[alertController.view addSubview:ageToolbar];
[alertController.view addSubview:ageTitleLbl];
[alertController.view addSubview:picker];
ageActionSheet = alertController;
}
else
{
ageActionSheet = [[UIActionSheet alloc]initWithTitle:nil delegate:nil cancelButtonTitle:@"" destructiveButtonTitle:nil otherButtonTitles: nil];
[ageActionSheet addSubview:ageToolbar];
[ageActionSheet addSubview:ageTitleLbl];
[ageActionSheet addSubview:picker];
[ageActionSheet sizeToFit];
}
只是在切换软件键盘上没什么。。在 在模拟器中打开时,只需转到
Hardware >> Keyboard >> Toggle SOftware Keyboard...
由于iOS8中不推荐使用UIActionSheet,因此必须使用其他视图来保存UIDatePicker和UIToolBar。。。在这个答案中,我使用UIView来保存上述UI对象
@interface ViewController ()<UIActionSheetDelegate, UITextFieldDelegate>{
UIActionSheet *pickerViewActionSheet;
UIDatePicker *datePicker;
UIToolbar *pickerToolbar;
UIView *dateView;
}
@property (strong, nonatomic) IBOutlet UITextField *dateOfBirthTextField;
@end
@implementation ViewController
-(void)textFieldDidBeginEditing:(UITextField *)textField{
if(textField == self.dateOfBirthTextField){
[textField resignFirstResponder];
float platformVersion = 8.0;
//Check for iOS 8.0+
if([[[UIDevice currentDevice] systemVersion] floatValue ] >= platformVersion){
// iOS8 DatePicker view implementation
dateView = [[UIView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height/2.0, 320, 640)];
pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
pickerToolbar.barStyle=UIBarStyleBlackOpaque;
[pickerToolbar sizeToFit];
NSMutableArray *barItems = [[NSMutableArray alloc] init];
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dateChosen:)];
[barItems addObject:barButtonItem];
barButtonItem.tag = 123;
[pickerToolbar setItems:barItems animated:YES];
[dateView addSubview:pickerToolbar];
datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0.0, 44.0, 320.0, 300.0)];
datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker addTarget:self action:@selector(dateChanged) forControlEvents:UIControlEventValueChanged];
datePicker.backgroundColor = [UIColor whiteColor];
[dateView addSubview:datePicker];
[self.view addSubview:dateView];
}
else {
//Pre iOS8.0 "usual" DatePicker implementation.
datePicker = [[UIDatePicker alloc] init];
pickerViewActionSheet = [[UIActionSheet alloc] initWithTitle:@"Select the date!"
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:nil];
datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0.0, 44.0, 320.0, 300.0)];
datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker addTarget:self action:@selector(dateChanged) forControlEvents:UIControlEventValueChanged];
datePicker.tag = -1;
pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
pickerToolbar.barStyle=UIBarStyleBlackOpaque;
[pickerToolbar sizeToFit];
NSMutableArray *barItems = [[NSMutableArray alloc] init];
UIBarButtonItem *batButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonClicked)];
[barItems addObject:batButtonItem];
[pickerToolbar setItems:barItems animated:YES];
[pickerViewActionSheet addSubview:pickerToolbar];
[pickerViewActionSheet addSubview:datePicker];
[pickerViewActionSheet showInView:self.view];
[pickerViewActionSheet setBounds:CGRectMake(0,0,320, 464)];
}
}
}
//iOS8.0+ when the date has chosen, remove the corresponding view from the parent view.
-(void) dateChosen:(UIBarButtonItem *) barButton {
if(barButton.tag ==123){
[dateView removeFromSuperview];
}
}
//Get the chosen date from the UIDatePicker to the corresponding UITextField.
-(void)dateChanged{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy"];
self.dateOfBirthTextField.text = [dateFormatter stringFromDate:[datePicker date]];
}
//Pre iOS8.0 for closing the actionsheet
-(BOOL)closeDatePicker:(id)sender{
[pickerViewActionSheet dismissWithClickedButtonIndex:0 animated:YES];
[self.dateOfBirthTextField resignFirstResponder];
return YES;
}
//Pre iOS8.0
-(void)doneButtonClicked{
[self closeDatePicker:self];
}
@end
@interface ViewController(){
UIActionSheet*PickServiceActionSheet;
UIDatePicker*日期选择器;
UIToolbar*选择器Toolbar;
UIView*日期视图;
}
@属性(强,非原子)IBOutlet UITextField*dateOfBirthTextField;
@结束
@实现视图控制器
-(无效)textFieldDidBeginEditing:(UITextField*)textField{
如果(textField==self.dateOfBirthTextField){
[textField resignFirstResponder];
浮动平台版本=8.0;
//检查iOS 8.0+
if([[[UIDevice currentDevice]systemVersion]floatValue]>=platformVersion){
//iOS8日期选择器视图实现
dateView=[[UIView alloc]initWithFrame:CGRectMake(0,self.view.frame.size.height/2.0320640)];
pickerToolbar=[[UIToolbar alloc]initWithFrame:CGRectMake(0,0320,44)];
pickerToolbar.barStyle=UIBarStyleBlack不透明;
[pickerToolbar sizeToFit];
NSMUTABLEARRY*barItems=[[NSMUTABLEARRY alloc]init];
UIBarButtonItem*barButtonItem=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:uiBarButtonSystemItem目标:自我操作:@selector(DateSelected:)];
[巴利坦人添加对象:巴布通教派];
barButtonItem.tag=123;
[pickerToolbar设置项:barItems动画:是];
[日期视图添加子视图:选择器工具栏];
datePicker=[[UIDatePicker alloc]initWithFrame:CGRectMake(0.0,44.0,320.0,300.0)];
datePicker.datePickerMode=UIDatePickerModeDate;
[datePicker addTarget:self action:@selector(dateChanged)for ControlEvents:UIControlEventValueChanged];
datePicker.backgroundColor=[UIColor whiteColor];
[日期视图添加子视图:日期选择器];
[self.view addSubview:dateView];
}
否则{
//iOS8.0之前的“常规”日期选择器实现。
datePicker=[[UIDatePicker alloc]init];
PickerViewSheet=[[UIActionSheet alloc]initWithTitle:@“选择日期!”
代表:赛尔夫
取消按钮:无
破坏性按钮:无
其他按钮:无];
datePicker=[[UIDatePicker alloc]initWithFrame:CGRectMake(0.0,44.0,320.0,300.0)];
datePicker.datePickerMode=UIDatePickerModeDate;
[datePicker addTarget:self action:@selector(dateChanged)for ControlEvents:UIControlEventValueChanged];
datePicker.tag=-1;
pickerToolbar=[[UIToolbar alloc]initWithFrame:CGRectMake(0,0320,44)];
pickerToolbar.barStyle=UIBarStyleBlack不透明;
[pickerToolbar sizeToFit];
NSMUTABLEARRY*barItems=[[NSMUTABLEARRY alloc]init];
UIBarButtonItem*batButtonItem=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:uiBarButtonSystemItem完成目标:自我操作:@selector(doneButtonClicked)];
[barItems addObject:batButtonItem];
[pickerToolbar设置项:barItems动画:是];
[PickerActionSheet addSubview:pickerToolbar];
[PickServiceWactionSheet addSubview:datePicker];
[PickServiceWactionSheet showInView:self.view];
[PickServiceActionSheet setBounds:CGRectMake(0,0320464)];
}
}
}
//iOS8.0+选择日期后,从父视图中删除相应的视图。
-(无效)日期选择:(UIBarButtonItem*)barButton{
if(barButton.tag==123){
[日期视图从SuperView移除];
}
}
//将所选日期从UIDatePicker获取到相应的UITextField。
-(作废)更改日期{
NSDateFormatter*dateFormatter=[[NSDateFormatter alloc]init];
dateFormatter=[[NSDateFormatter alloc]init];
[日期格式化程序setDateFormat:@“dd/MM/yyyy”];
self.dateOfBirthTextField.text=[dateFormatter stringFromDate:[datePicker date]];
}
//iOS8.0之前版本,用于关闭操作表
-(BOOL)closeDatePicker:(id)发送方{
[PickServiceActionSheet使用Clicked按钮解除索引:0动画:是];
[self.dateOfBirthTextField辞职第一响应者];
返回YES;
}
//iOS8.0之前
-(无效)doneButtonClicked{
[自关闭日期选择器:self];
}
@结束
我希望这有助于……您可以参考一个关于如何使用swift在创建/使用UIPickerView和UIDatePicker的示例
@interface ViewController ()<UIActionSheetDelegate, UITextFieldDelegate>{
UIActionSheet *pickerViewActionSheet;
UIDatePicker *datePicker;
UIToolbar *pickerToolbar;
UIView *dateView;
}
@property (strong, nonatomic) IBOutlet UITextField *dateOfBirthTextField;
@end
@implementation ViewController
-(void)textFieldDidBeginEditing:(UITextField *)textField{
if(textField == self.dateOfBirthTextField){
[textField resignFirstResponder];
float platformVersion = 8.0;
//Check for iOS 8.0+
if([[[UIDevice currentDevice] systemVersion] floatValue ] >= platformVersion){
// iOS8 DatePicker view implementation
dateView = [[UIView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height/2.0, 320, 640)];
pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
pickerToolbar.barStyle=UIBarStyleBlackOpaque;
[pickerToolbar sizeToFit];
NSMutableArray *barItems = [[NSMutableArray alloc] init];
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dateChosen:)];
[barItems addObject:barButtonItem];
barButtonItem.tag = 123;
[pickerToolbar setItems:barItems animated:YES];
[dateView addSubview:pickerToolbar];
datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0.0, 44.0, 320.0, 300.0)];
datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker addTarget:self action:@selector(dateChanged) forControlEvents:UIControlEventValueChanged];
datePicker.backgroundColor = [UIColor whiteColor];
[dateView addSubview:datePicker];
[self.view addSubview:dateView];
}
else {
//Pre iOS8.0 "usual" DatePicker implementation.
datePicker = [[UIDatePicker alloc] init];
pickerViewActionSheet = [[UIActionSheet alloc] initWithTitle:@"Select the date!"
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:nil];
datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0.0, 44.0, 320.0, 300.0)];
datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker addTarget:self action:@selector(dateChanged) forControlEvents:UIControlEventValueChanged];
datePicker.tag = -1;
pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
pickerToolbar.barStyle=UIBarStyleBlackOpaque;
[pickerToolbar sizeToFit];
NSMutableArray *barItems = [[NSMutableArray alloc] init];
UIBarButtonItem *batButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonClicked)];
[barItems addObject:batButtonItem];
[pickerToolbar setItems:barItems animated:YES];
[pickerViewActionSheet addSubview:pickerToolbar];
[pickerViewActionSheet addSubview:datePicker];
[pickerViewActionSheet showInView:self.view];
[pickerViewActionSheet setBounds:CGRectMake(0,0,320, 464)];
}
}
}
//iOS8.0+ when the date has chosen, remove the corresponding view from the parent view.
-(void) dateChosen:(UIBarButtonItem *) barButton {
if(barButton.tag ==123){
[dateView removeFromSuperview];
}
}
//Get the chosen date from the UIDatePicker to the corresponding UITextField.
-(void)dateChanged{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy"];
self.dateOfBirthTextField.text = [dateFormatter stringFromDate:[datePicker date]];
}
//Pre iOS8.0 for closing the actionsheet
-(BOOL)closeDatePicker:(id)sender{
[pickerViewActionSheet dismissWithClickedButtonIndex:0 animated:YES];
[self.dateOfBirthTextField resignFirstResponder];
return YES;
}
//Pre iOS8.0
-(void)doneButtonClicked{
[self closeDatePicker:self];
}
@end