Phi*_*lly 12 date datepicker uidatepicker ipad ios
我在带静态单元格的TableView中有一个UIDatePicker.DatePicker在iPhone版本的App中运行良好,但iPad似乎压缩了DatePicker,因此不会显示保存月份日期(dd)的中心列.请注意,"十一月"中的"er"被截断.
我通过将日期样式更改为西班牙语(dd MMMM YYY)来验证这一点,日期显示为月份的上半月和全年.每个月的名字的后半部分被截断.
移植到iOS 8有没有遇到过这样的问题?
永远不确定要发布多少代码.以下是相关课程中的大部分内容
@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
Run Code Online (Sandbox Code Playgroud)
谢谢,
use*_*693 10
这个问题似乎与Autolayout有关.请在故事板中选择日期选择器,并使用UITableViewCell的内容视图添加"容器中心水平"约束.有关更好的理解,请参见附图.
应用约束后所需的结果;
没有约束;
要添加约束,请在按住并右键单击UIDatePicker并将指针拖动到UITableViewCell的内容视图并释放指针.现在选择"容器中心水平"约束.请尝试在评论中发帖.
归档时间: |
|
查看次数: |
3595 次 |
最近记录: |