Встраивание UIDatePicker в UIActionSheet
Я пытаюсь получить UIDatePicker с UIButton для отображения в UIActionSheet. К сожалению, это обрезается, и весь сборщик данных не виден. Я еще даже не пытался добавить UIButton. Может ли кто-нибудь посоветовать правильно настроить весь вид? Я не уверен, как добавить правильные размеры, поскольку UIActionSheet, кажется, не хватает -initWithFrame:
Конструктор типов.
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];
[pickerView release];
[menu release];
Я также попробовал что-то похожее на:
UIActionSheet *menu = [[UIActionSheet alloc] initWithFrame:CGRectMake(200.0, 200.0, 100.0f, 100.0f)];
Координаты, конечно, нереалистичны, но, похоже, они не влияют на положение / размер таблицы UIActionSheet.
7 ответов
Вы можете использовать что-то вроде этого (настроить координаты):
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];
Но лучше создать полноэкранный вид с помощью UIDatePicker и панели навигации. Для примера см. Пример UICatalog -> Pickers из iPhone DevCenter.
Попробуйте добавить следующую строку, чтобы решить проблему отключенных кнопок
[menu sendSubviewToBack:pickerView];
Дмитрий отвечает почти правильно. Однако рамка листа действий слишком мала, и поэтому прикосновения к нижней части сборщика игнорируются. Я исправил эти проблемы:
UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:@"Date Picker"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:@"OK",nil];
// Add the picker
UIDatePicker *pickerView = [[UIDatePicker alloc] init];
pickerView.datePickerMode = UIDatePickerModeTime;
[menu addSubview:pickerView];
[menu showInView:_mainView];
CGRect menuRect = menu.frame;
CGFloat orgHeight = menuRect.size.height;
menuRect.origin.y -= 214; //height of picker
menuRect.size.height = orgHeight+214;
menu.frame = menuRect;
CGRect pickerRect = pickerView.frame;
pickerRect.origin.y = orgHeight;
pickerView.frame = pickerRect;
[pickerView release];
[menu release];
Это работает для меня
NSString *title = UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation) ? @"\n\n\n\n\n\n\n\n\n" : @"\n\n\n\n\n\n\n\n\n\n\n\n" ;
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:[NSString stringWithFormat:@"%@%@", title, NSLocalizedString(@"SelectADateKey", @"")]
delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"Ok", nil];
[actionSheet showInView:self.view];
UIDatePicker *datePicker = [[[UIDatePicker alloc] init] autorelease];
datePicker.datePickerMode = UIDatePickerModeDate;
[actionSheet addSubview:datePicker];
a little tricky but it works!
Кнопки вверху, подборщик внизу:
UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:@"Date Picker"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:@"OK",nil];
// Add the picker
UIDatePicker *pickerView = [[UIDatePicker alloc] init];
pickerView.datePickerMode = UIDatePickerModeTime;
[menu addSubview:pickerView];
[menu showInView:_mainView];
CGRect menuRect = menu.frame;
menuRect.origin.y -= 214;
menuRect.size.height = 300;
menu.frame = menuRect;
CGRect pickerRect = pickerView.frame;
pickerRect.origin.y = 174;
pickerView.frame = pickerRect;
[pickerView release];
[menu release];
Убедитесь, что вы показываете UIActionSheet в правом представлении, когда находитесь внутри UITabBarController, чтобы избежать проблем с интерактивностью внизу:
[actionSheet showInView:self.parentViewController.tabBarController.view];
Возможно, не напрямую отвечая на конкретный вопрос (как заставить UIDatePicker соответствовать), но для реализации UIActionSheet, который представляет UIDatePicker (также другие), пожалуйста, смотрите ActionSheetPicker. Из файла Readme:
Легко представить ActionSheet с PickerView, что позволяет пользователю выбирать из ряда неизменных параметров. Основано на альтернативе раскрывающегося списка HTML, найденной в mobilesafari.
Также:
Некоторый код, полученный из публикации Марсио о переполнении стека [ Добавить UIPickerView и кнопку в листе действий - Как? ]
Даже если кто-то не использует код, его нужно прочитать, прежде чем вы создадите свой собственный.
Обновить:
Эта версия устарела: используйте взамен ActionSheetPicker-3.0.