Я хочу вставить UIDatePicker
, когда мой пользователь нажимает на поле даты просмотра таблицы, точно так же, как в стандартном приложении контактов, когда пользователь нажимает на поле дня рождения. С одной дополнительной деталью убийцы:
Он находится в приложении панели вкладок, и я хочу, чтобы UIDatePicker
скользил по панели вкладок. И все еще вращается, когда пользователь помещает свой телефон в ориентацию lanscape.
Я показываю UIDatePicker
, чтобы вставить в представление, а затем анимировать его положение:
[self.view addSubview: self.pickerView];
Когда я это делаю, отображается UIDatePicker
, но не распространяется на панель вкладок.
Я также могу добавить его в окно:
[self.view.window addSubview: self.pickerView];
UIDatePicker
правильно скользит по панели вкладок, но при этом не соответствует ориентации.
Единственный полуоприемлемый способ, который я нашел, это вообще обойтись без панели вкладок, используя
detailViewController.hidesBottomBarWhenPushed = YES;
Но это не то, что я хочу: я хочу панель вкладок в подробном представлении. Я только хочу, чтобы он ушел, выбирая дату. Я не могу поместить UIDatePicker
в его собственный контроллер с hidesBottomBarWhenPushed = YES
, так как это полностью покрыло бы экран, и я бы предпочел, чтобы детальный вид был частично видимым.
Любое предложение приветствуется.
Вот полный код, который я использую, чтобы показать UIDatePicker
, скопированный из некоторого примера кода:
- (void) doPickDate
{
NSDate *initialDateForPicker = [(ExpenseData*) self.displayedObject displayDate];
self.pickerView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;
self.pickerView.datePickerMode = UIDatePickerModeDate;
self.pickerView.date = initialDateForPicker;
// check if our date picker is already on screen
if (self.pickerView.superview == nil)
{
[self.view addSubview: self.pickerView];
// size up the picker view to our screen and compute the start/end frame origin for our slide up animation
// compute the start frame
CGRect screenRect = [[UIScreen mainScreen] applicationFrame];
CGSize pickerSize = [self.pickerView sizeThatFits:CGSizeZero];
CGRect startRect = CGRectMake(0.0,
screenRect.origin.y + screenRect.size.height,
pickerSize.width, pickerSize.height);
self.pickerView.frame = startRect;
// compute the end frame
CGRect pickerRect = CGRectMake(0.0,
screenRect.origin.y + screenRect.size.height - pickerSize.height,
pickerSize.width,
pickerSize.height);
// start the slide up animation
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
// we need to perform some post operations after the animation is complete
[UIView setAnimationDelegate:self];
self.pickerView.frame = pickerRect;
// shrink the table vertical size to make room for the date picker
CGRect newFrame = self.tableView.frame;
newFrame.size.height -= self.pickerView.frame.size.height - 49 /* tab bar height */;
self.tableView.frame = newFrame;
[UIView commitAnimations];
// add the "Done" button to the nav bar
self.navigationItem.rightBarButtonItem = self.doneButton;
}
}