iDatePicker未在iOS 8.1的iPad上显示月日(dd)的控制盘
我在带有静态单元格的TableView中有一个UIDatePicker。DatePicker在iPhone版本的应用程序中工作得很好,但iPad似乎压缩了DatePicker,因此保存月份(dd)的中间列不会显示出来。请注意,“十一月”中的“er”被截断 我通过将日期样式更改为西班牙语(dd-MMMM-YYY)来验证这一点,并且日期显示与上半月和全年一样。每个月名称的后半部分被截断 有人在移植到iOS 8时遇到过这样的问题吗 永远不知道要发布多少代码。以下是相关课程中的大部分内容iDatePicker未在iOS 8.1的iPad上显示月日(dd)的控制盘,ios,ipad,date,datepicker,uidatepicker,Ios,Ipad,Date,Datepicker,Uidatepicker,我在带有静态单元格的TableView中有一个UIDatePicker。DatePicker在iPhone版本的应用程序中工作得很好,但iPad似乎压缩了DatePicker,因此保存月份(dd)的中间列不会显示出来。请注意,“十一月”中的“er”被截断 我通过将日期样式更改为西班牙语(dd-MMMM-YYY)来验证这一点,并且日期显示与上半月和全年一样。每个月名称的后半部分被截断 有人在移植到iOS 8时遇到过这样的问题吗 永远不知道要发布多少代码。以下是相关课程中的大部分内容 @proper
@property (strong, nonatomic) IBOutlet UITableViewCell *dateDisplay;
@property (strong, nonatomic) IBOutlet UITableViewCell *datePickerCell;
@property (strong, nonatomic) IBOutlet UIDatePicker *datePicker;
@property (strong, nonatomic) IBOutlet UITableViewCell *unattached;
@property (strong, nonatomic) IBOutlet UITableViewCell *middleschool;
@property (strong, nonatomic) IBOutlet UITableViewCell *highschool;
@property (strong, nonatomic) IBOutlet UITableViewCell *collegiate;
@property (strong, nonatomic) IBOutlet UITableViewCell *youthclub;
@end
@implementation MeetFinderTableViewController
@synthesize divisions = _divisions;
@synthesize datePickerIndexPath = _datePickerIndexPath;
@synthesize meetDate = _meetDate;
@synthesize doSaveUserDefaults = _doSaveUserDefaults;
@synthesize divisionSelected = _divisionSelected;
@synthesize arrayOfReuseIds = _arrayOfReuseIds;
@synthesize myTV = _myTV;
# pragma SplitViewController Variables
@synthesize meetIDForSegue = _meetIDForSegue;
@synthesize meetNameForSegue = _meetNameForSegue;
#pragma SetUp Configuration
-(void) setArrayOfReuseIds:(NSArray *)arrayOfReuseIds
{
_arrayOfReuseIds = arrayOfReuseIds;
}
-(void) setMyTV:(UITableView *)myTV
{
_myTV = myTV;
}
-(void) setMeetDate:(NSDate *)meetDate
{
if(_meetDate != meetDate){
_meetDate = meetDate;
[self setDoSaveUserDefaults:YES];
}
}
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (MapViewController *)splitViewMapViewController
{
id mvc = [self.splitViewController.viewControllers lastObject];
if (![mvc isKindOfClass:[MapViewController class]]) {
mvc = nil;
}
if (debug==1) NSLog(@"%@ = %@",NSStringFromSelector(_cmd), mvc);
return mvc;
}
- (void)awakeFromNib
{
[super awakeFromNib];
self.splitViewController.delegate = self;
if (debug==1) NSLog(@"Do I make it to %@",NSStringFromSelector(_cmd));
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.clearsSelectionOnViewWillAppear = YES;
self.datePicker.hidden = YES;
self.datePickerIsShowing = NO;
[self setArrayOfReuseIds:[[NSArray alloc] initWithObjects:
@"unattached",@"middleschool",@"highschool",@"collegiate",@"youthclub", nil]];
[self setDivisions:[[NSArray alloc] initWithObjects:
@"Unattached", @"Middle School", @"High School",
@"Collegiate", @"Youth Club", nil]];
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"divisionPreference"]) {
[self setDivisionSelected:[[NSUserDefaults standardUserDefaults] objectForKey:@"divisionPreference"]];
} else [self setDivisionSelected:[NSNumber numberWithInt:highSchoolTag]];
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"datePreferenceForMeetSearch"]) {
[self setMeetDate:[[NSUserDefaults standardUserDefaults] objectForKey:@"datePreferenceForMeetSearch"]];
} else [self setMeetDate:[NSDate date]];
[self setMyTV:self.tableView];
if (debug==1) NSLog(@"In %@ before check splitViewMapViewController",NSStringFromSelector(_cmd));
if ([self splitViewMapViewController]) { // if in split view
[self splitViewMapViewController].dateForSearch = self.meetDate;
[self splitViewMapViewController].levelOfCompetition = [self.divisionSelected stringValue];
}
}
-(void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self setupDateLabel];
[self setUpMenuItems];
if (debug==1) NSLog(@"Do I make it to %@",NSStringFromSelector(_cmd));
}
-(void) viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:YES];
if (self.doSaveUserDefaults) {
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:self.divisionSelected
forKey:@"divisionPreference"];
[userDefaults setObject:self.meetDate
forKey:@"datePreferenceForMeetSearch"];
[userDefaults synchronize];
NSLog(@"Getting ready to set newPreferences with divisionSelected: %@ and dateOfMeet: %@", [self.divisionSelected stringValue], self.meetDate);
MapPreferencesDataDelegate *newPreferences = [[MapPreferencesDataDelegate alloc]
initWithName:[self.divisionSelected stringValue]
dateOfMeet:self.meetDate];
[self.delegate saveMeetSearchPreferences:newPreferences];
}
}
- (void)setupDateLabel {
self.dateFormatter = [[NSDateFormatter alloc] init];
[self.dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[self.dateFormatter setTimeStyle:NSDateFormatterNoStyle];
NSDate *defaultDate;
if (!self.meetDate || self.meetDate == nil) {
defaultDate = [NSDate date];
[self setMeetDate:defaultDate];
} else defaultDate = self.meetDate;
self.dateDisplay.textLabel.text = [NSString stringWithFormat:@"%@",stringForDateDisplay];
self.dateDisplay.textLabel.textColor = [self.tableView tintColor];
self.dateDisplay.detailTextLabel.text = [self.dateFormatter stringFromDate:defaultDate];
self.dateDisplay.detailTextLabel.textColor = [self.tableView tintColor];
}
- (void)showDatePickerCell {
self.datePickerIsShowing = YES;
[self.tableView beginUpdates];
[self.tableView endUpdates];
self.datePicker.hidden = NO;
self.datePicker.alpha = 0.0f;
[UIView animateWithDuration:0.25 animations:^{
self.datePicker.alpha = 1.0f;
}];
}
- (void)hideDatePickerCell {
self.datePickerIsShowing = NO;
[self.tableView beginUpdates];
[self.tableView endUpdates];
[UIView animateWithDuration:0.25
animations:^{
self.datePicker.alpha = 0.0f;
}
completion:^(BOOL finished){
self.datePicker.hidden = YES;
}];
}
-(void) placeCheckMarkForDivisionSelection:(NSInteger) myDivisionPreference
#pragma mark - Table view data source
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
switch (indexPath.section) {
case 0:
{
if (indexPath.row == 0){
self.datePicker.hidden = NO;
self.datePickerIsShowing = !self.datePickerIsShowing;
[UIView animateWithDuration:.4 animations:^{
[self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:1 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView reloadData];
}];
}
break;
}
case 1:
{
UITableViewCell *cell1 = [tableView cellForRowAtIndexPath:indexPath];
NSInteger tagForSelectedDivision = cell1.tag;
[self placeCheckMarkForDivisionSelection:tagForSelectedDivision];
//
[self setDivisionSelected:[NSNumber numberWithInteger:tagForSelectedDivision]];
if ([self splitViewMapViewController]) [self splitViewMapViewController].levelOfCompetition = [self.divisionSelected stringValue];
break;
}
}
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 0 && indexPath.row == 1) { // this is my picker cell
if (self.datePickerIsShowing) {
return 219;
} else {
return 0;
}
} else {
return self.tableView.rowHeight;
}
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return numberOfSections;
}
#pragma mark - Action methods
- (IBAction)pickerDateChanged:(UIDatePicker *)sender {
if ([self splitViewMapViewController]) { // if in split view
[self splitViewMapViewController].dateForSearch = sender.date;
[self splitViewMapViewController].levelOfCompetition = [self.divisionSelected stringValue];
}
self.dateDisplay.detailTextLabel.text = [self.dateFormatter stringFromDate:sender.date];
self.meetDate = sender.date;
[self setMeetDate:sender.date];
}
- (void) displayAlertBoxWithTitle:(NSString*)title message:(NSString*) myMessage cancelButton:(NSString*) cancelText
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
message:myMessage
delegate:nil
cancelButtonTitle:cancelText
otherButtonTitles:nil];
[alert show];
}
#pragma SplitViewController Implementation
- (id <SplitViewBarButtonItemPresenter>)splitViewBarButtonItemPresenter
{
id detailVC = [self.splitViewController.viewControllers lastObject];
if (![detailVC conformsToProtocol:@protocol(SplitViewBarButtonItemPresenter)]) {
detailVC = nil;
}
return detailVC;
}
- (BOOL)splitViewController:(UISplitViewController *)svc
shouldHideViewController:(UIViewController *)vc
inOrientation:(UIInterfaceOrientation)orientation
{
return NO;
}
- (void)splitViewController:(UISplitViewController *)svc
willHideViewController:(UIViewController *)aViewController
withBarButtonItem:(UIBarButtonItem *)barButtonItem
forPopoverController:(UIPopoverController *)pc
{
barButtonItem.title = barButtonItemTitle;
[self splitViewBarButtonItemPresenter].splitViewBarButtonItem = barButtonItem;
}
- (void)splitViewController:(UISplitViewController *)svc
willShowViewController:(UIViewController *)aViewController
invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
[self splitViewBarButtonItemPresenter].splitViewBarButtonItem = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
@end
@property(强,非原子)IBOutlet UITableViewCell*日期显示;
@属性(强,非原子)IBUITableViewCell*datePickerCell;
@属性(强,非原子)IBUIDatePicker*datePicker;
@属性(强,非原子)IBUITableViewCell*未附加;
@属性(强、非原子)IBUITableViewCell*中学;
@属性(强、非原子)IBUITableViewCell*高中;
@属性(强、非原子)IBUITableViewCell*学院式;
@属性(强,非原子)IBUITableViewCell*youthclub;
@结束
@实现MeetFinderTableViewController
@综合分部=_分部;
@合成datePickerIndexPath=\u datePickerIndexPath;
@合成meetDate=_meetDate;
@合成doSaveUserDefaults=_doSaveUserDefaults;
@综合分区选定=_分区选定;
@合成arrayOfReuseIds=_arrayOfReuseIds;
@合成myTV=\u myTV;
#pragma SplitViewController变量
@合成meetIDForSegue=_meetIDForSegue;
@合成meetNameForSegue=_meetNameForSegue;
#pragma设置配置
-(无效)setArrayOfReuseIds:(NSArray*)arrayOfReuseIds
{
_arrayOfReuseIds=arrayOfReuseIds;
}
-(无效)设置myTV:(UITableView*)myTV
{
_myTV=myTV;
}
-(无效)会议日期:(NSDate*)会议日期
{
如果(_meetDate!=meetDate){
_meetDate=meetDate;
[self-setDoSaveUserDefaults:是];
}
}
-(id)initWithStyle:(UITableViewStyle)样式
{
self=[super initWithStyle:style];
如果(自我){
//自定义初始化
}
回归自我;
}
-(MapViewController*)拆分视图MapViewController
{
id mvc=[self.splitViewController.viewControllers lastObject];
如果(![mvc isKindOfClass:[MapViewController类]]){
mvc=零;
}
如果(调试==1)NSLog(@“%@=%@”、NSStringFromSelector(_cmd)、mvc;
返回mvc;
}
-(无效)从NIB中唤醒
{
[超级awakeFromNib];
self.splitViewController.delegate=self;
如果(debug==1)NSLog(@“我是否将其设置为%@”),则NSStringFromSelector(_cmd));
}
-(无效)viewDidLoad
{
[超级视图下载];
self.clearselectiononviewwillappear=YES;
self.datePicker.hidden=是;
self.datePickerIsShowing=否;
[self-SetArrayOfRuseId:[[NSArray alloc]initWithObjects:
@“未婚”、“中学”、“高中”、“学院”、“青年俱乐部”,无];
[self-setDivisions:[[NSArray alloc]initWithObjects:
@“单身”、“中学”、“高中”,
@“学院”、“青年俱乐部”,无];
if([[NSUserDefaults standardUserDefaults]objectForKey:@“divisionPreference”]){
[self-setDivisionSelected:[[NSUserDefaults standardUserDefaults]objectForKey:@“divisionPreference”];
}else[self setDivisionSelected:[NSNumber numberWithInt:highSchoolTag]];
if([[NSUserDefaults standardUserDefaults]objectForKey:@“datePreferenceForMeetSearch”]){
[self-setMeetDate:[[NSUserDefaults standardUserDefaults]objectForKey:@“datePreferenceForMeetSearch”];
}else[self-setMeetDate:[NSDate]];
[self-setMyTV:self.tableView];
如果(debug==1)NSLog(@“In%@在检查splitViewMapViewController之前)”,则NSStringFromSelector(_cmd));
if([self-splitviewmappviewcontroller]){//if在拆分视图中
[self splitViewMapViewController].dateForSearch=self.meetDate;
[self splitViewMapViewController]。竞争级别=[self.Value];
}
}
-(无效)视图将显示:(BOOL)动画
{
[超级视图将显示:动画];
[自设置日期标签];
[自设置菜单项];
如果(debug==1)NSLog(@“我是否将其设置为%@”),则NSStringFromSelector(_cmd));
}
-(无效)视图将消失:(BOOL)已设置动画
{
[超级视图将消失:是];
if(self.doSaveUserDefaults){
NSUserDefaults*userDefaults=[NSUserDefaults standardUserDefaults];
[userDefaults setObject:self.Selected
福基:@“优先选择”];
[userDefaults setObject:self.meetDate
forKey:@“datePreferenceForMeetSearch”];
[用户默认同步];
NSLog(@“准备使用选定的分区设置新首选项:%@和会议日期:%@,[self.divisionSelected stringValue],self.meetDate”);
MapPreferencesDataDelegate*newPreferences=[[MapPreferencesDataDelegate alloc]
initWithName:[self.selected stringValue]
会议日期:self.meetDate];
[self.delegate saveMeetSearchPreferences:newPreferences];
}
}
-(无效)setupDateLabel{
self.dateFormatter=[[NSDateFormatter alloc]init];
[self.dateFormatter setDateStyle:nsDateFormatTermeLiumStyle];
[self.dateFormatter setTimeStyle:NSDateFormatterNoStyle];
NSDate*默认日期;
如果(!self.meetDate | self.meetDate==nil){
defaultDate=[NSDate日期];
[自我设置会议日期:默认日期];
}else defaultDate=self.meetDate;
self.dateDisplay.textLabel.text=[NSString stringWithFormat:@“%@”,stringForDateDisplay];
self.dateDisplay.textlab.textColor=[self.tableView tintColor];
self.dateDisplay.detailTextLabel.text=[self.dateFormatter stringFromDate:默认值
//@extern
- (void) showAddEditModeUI {
[self fadeInView:self.editMembershipView];
//WORKAROUND - ios8 issue was cutting off the date picker in the middle
//the solution in this stack overflow didn't work for me:
//https://stackoverflow.com/questions/26352797/uidatepicker-not-displaying-wheel-for-day-of-the-month-dd-on-ipad-for-ios-8-1
//but this did work
UIDatePicker* dPicker = [[UIDatePicker alloc] initWithFrame:self.startDatePicker.frame];
dPicker.date = self.startDatePicker.date;
dPicker.datePickerMode = self.startDatePicker.datePickerMode;
[self.startDatePicker removeFromSuperview];
self.startDatePicker = dPicker;
[self.editMembershipView addSubview:self.startDatePicker];
}
[myDatePicker setDatePickerMode:UIDatePickerModeDateAndTime];
[myDatePicker setDatePickerMode:UIDatePickerModeDate];
[self.tableView setNeedsLayout];
[self.tableView layoutIfNeeded];
if (@available(iOS 14, *)) {
UIDatePicker *picker = [UIDatePicker appearance];
picker.preferredDatePickerStyle = UIDatePickerStyleWheels;
}
<DatePicker
customStyles={{
datePicker: {
backgroundColor: '#d1d3d8',
justifyContent:'center'
}
}}
...
/>