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
和else
UIAlertViewController
。将选择器控制器添加为子视图

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