我遇到日期选择器问题,即UIDatePicker
在iOS 8以外的所有版本中都运行正常。
代码:
UIDatePicker *datePicker = [[UIDatePicker alloc]init];
[datePicker setDate:[NSDate date]];
[datePicker setDatePickerMode:UIDatePickerModeDate];
datePicker.maximumDate=[NSDate date];
[datePicker addTarget:self action:@selector(updateBirthdateField:) forControlEvents:UIControlEventValueChanged];
[birthdatField setInputView:datePicker];
答案 0 :(得分:7)
在Xcode 6.0.1中,这对我来说是一个模拟器问题。这适用于设备(带有iOS 8发行版的iPhone 4S)。如前一个用户所述,以下步骤使我在iOS 8模拟器上可以看到日期选择器。
启动模拟器和应用程序,然后单击将日期选择器作为输入视图的字段。
现在按CMD + K(硬件 - >键盘 - >切换软件键盘),日期选择器变为可见。
同样,这只是一个模拟器问题,并且设备上没有出现此问题。
答案 1 :(得分:2)
我在iOS模拟器上遇到同样的问题 - 在iOS 7中工作,但在iOS 8下工作。要修复问题,请选择iOS模拟器的硬件菜单,然后选择键盘 - >切换软件键盘。
答案 2 :(得分:2)
我也遇到了这个问题,现在我通过以下两种不同的方法解决了这个问题:
1)。我使用了自定义的UIActionSheet
,而不是UIView
。只是将日期选择器添加到视图中并显示和解除。另请参阅此SWActionSheet。
2)。我已经检查了如果操作系统版本大于8.0的条件,如果不是我使用UIActionSheet
和其他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];
}
答案 3 :(得分:2)
由于在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
我希望这有帮助......
答案 4 :(得分:0)
它只是在切换软件键盘..
在模拟器中打开时转到..
Hardware >> Keyboard >> Toggle SOftware Keyboard...