Установка UIDatePicker в таблицу UIActionSheet

Я пытаюсь получить UIDatePicker с UIButton, чтобы он появился в таблице UIActionSheet. К сожалению, он обрезается, и весь выбор даты не отображается. Я еще не пытался добавить UIButton. Может ли кто-нибудь предложить, чтобы все представление полностью соответствовало? Я не уверен, как добавить правильные размеры, поскольку у UIActionSheet, похоже, нет конструктора -initWithFrame: type.

 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.

Вы можете использовать что-то вроде этого (отрегулируйте координаты):

  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]; 

немного сложно, но это работает!

Кнопки сверху, сборщик внизу:

  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.

Также:

Некоторый код, полученный из сообщения Марсио в Stack Overflow [ Добавить UIPickerView и кнопку в листе действий – Как? ]

Даже если вы не используете код, это хорошее чтение, прежде чем вы откажетесь от своего собственного.


Обновить:

Эта версия устарела: вместо этого используйте ActionSheetPicker-3.0 .

  • Как я могу округлить значение float до двух постсимвольных позиций?
  • Передача параметров addTarget: действие: forControlEvents
  • Странная проблема сравнения поплавков в объективе-C
  • Может ли iPhone приложение блокировать телефонные звонки?
  • UIWebView - Как определить последнее сообщение webViewDidFinishLoad?
  • Проблема UITableView при использовании отдельного делегата / источника данных
  • Что делает флаг компоновщика -all_load?
  • Как обрабатывать дублируемую символьную ошибку от сторонних библиотек?
  • Округленный UIView с использованием CALayers - только некоторые углы - как?
  • Класс размера для iPad-портрета и ландшафтных режимов
  • Как преобразовать значения NSString в шестнадцатеричные значения
  • Давайте будем гением компьютера.