Размещение 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.

Это хороший немецкий пример.

user441155 07.09.2010 10:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
37
1
50 759
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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.

Я попробовал этот подход, он выглядел нормально, но я обнаружил, что кнопки на UIActionSheet были отключены. Есть идеи?

RedBlueThing 30.09.2009 06:33

Попробуйте добавить следующую строку, чтобы решить проблему с отключенными кнопками

[menu sendSubviewToBack:pickerView];

Это работает для меня

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

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

добавление переносов строки в заголовок - это просто хакерство, но что бы ни плавало на вашей лодке, я думаю

katzenhut 08.10.2013 13:34

Кнопки вверху, средство выбора внизу:

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

Должно быть [actionSheet showFromTabBar: self.parentViewController.tabBarController.ta‌ bBar]

masty 08.08.2014 03:01

Ответ Дмитрия - правильный почти. Однако рамка таблицы действий слишком мала, поэтому касания в нижней части окна выбора игнорируются. Я исправил эти проблемы:

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

У меня это все еще не работает. Я подозреваю, что отчасти моя проблема в том, что в моем приложении есть панель вкладок. Если я сдвигаю menu.frame еще на 44 пикселя (высота панели вкладок), средство выбора даты работает безупречно, но в нижней части меню есть зазор в 44 пикселя.

death_au 29.09.2010 11:59

В каком виде вы показываете ActionSheet, т.е. какой у вас _mainView? Не отображайте ActionSheet в представлении содержимого, отображайте его в представлении, содержащем представление содержимого и панель вкладок. Если вы используете контроллер навигации, вы можете сделать что-то вроде [menu showInView:self.navigationController.view].

Jakob Egger 03.10.2010 15:22

У меня возникла не отвечающая зона внизу экрана, но размещение [меню sendSubviewToBack: pickerView]; в самом конце все исправляет, по крайней мере у меня на iOS5

Claus 14.03.2012 13:57

Это потрясающий ответ!

Envil 21.04.2014 21:29

Возможно, не отвечая напрямую на конкретный вопрос (как подобрать UIDatePicker), но для реализации UIActionSheet, который представляет UIDatePicker (а также другие), см. ActionSheetPicker. Из этого файла Readme:

Easily present an ActionSheet with a PickerView, allowing user to select from a number of immutable options. Based on the HTML drop-down alternative found in mobilesafari.

Также:

Some code derived from marcio's post on Stack Overflow [ Add UIPickerView & a Button in Action sheet - How? ]

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


Обновлять:

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

Другие вопросы по теме