Кто-то отправил этот код в другом вопросе поместить UIDatePicker в UIAlertSheet:
UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:@"Date Picker"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:nil];
// Add the picker
UIDatePicker *pickerView = [[UIDatePicker alloc] init];
pickerView.datePickerMode = UIDatePickerModeDate;
[menu addSubview:pickerView];
[menu showInView:self.view];
[menu setBounds:CGRectMake(0,0,320, 500)];
CGRect pickerRect = pickerView.bounds;
pickerRect.origin.y = -100;
pickerView.bounds = pickerRect;
[pickerView release];
[menu release];
Я изменил его к этому:
UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:nil
delegate:nil
cancelButtonTitle:@"Done"
destructiveButtonTitle:nil
otherButtonTitles:nil];
// Add the picker
UIDatePicker *pickerView = [[UIDatePicker alloc] init];
pickerView.datePickerMode = UIDatePickerModeCountDownTimer;
[menu addSubview:pickerView];
[menu showInView:self.navigationController.tabBarController.view];
[menu setBounds:CGRectMake(0,0,320, 516)];
[pickerView setFrame:CGRectMake(0, 85, 320, 216)];
Это уступает, аварийный лист, правильно расположенный (проигнорируйте нулевого делегата; это только в целях дисплея). Проблема заключается здесь:
(источник: hosting-wizards.com)
Как Вы видите выше мелкого скроллера, существует проблема разделения на уровни. Я не подтвердил, происходит ли это на устройстве. Какие-либо идеи относительно того, почему это происходит?
Другой вопрос: Почему делает setBounds селектор на UIActionSheet, Y-размер установил в таком высоком значении для требуемого дисплея? Установка Y-размера к 480 должна создать полноэкранный дисплей, должен это нет? Обнуление этого значения делает его почти невидимым.
ПРИМЕЧАНИЕ СТОРОНЫ: код, вставляемый выше, не располагает UIDatePicker в то же место, что это находится в изображении, но проблема разделения на уровни происходит, неважно, куда UIDatePicker размещается. Проблема разделения на уровни находится только на вершине, не в нижней части.
Вы избежите проблемы с отображением и получите гораздо лучший результат, если просто поместить UIDatePicker в новый вид и реализовать поведение ползунка вверх-вниз самостоятельно. Это не так уж и сложно.
frame.origin.y = CGRectGetMaxY(mainView.boundaries)
[UIView beginAnimations:nil context:nil]
frame.origin.y -= CGRectGetHeight(popupView.boundaries)
[UIView commitAnimations]
(Обратите внимание, что настройка кадра - это псевдокод.)
That's it. Делайте это в обратном порядке, когда вам нужно закрыть вид. Я думаю, что это будет стоить хлопот; вставлять указатель даты в лист UIActionSheet выглядит невероятно липко.
.Вы можете найти этот поток полезным для альтернативного подхода: http://discussions.apple.com/message.jspa?messageID=7923095