Как отобразить пользовательское представление в UIActionSheet?

У меня есть UIView с выбором даты, который я хотел бы отобразить в листе действий. Я использую следующий код:

-(IBAction) button_click:(id)sender{
//UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"the title" delegate:nil cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Destructive" otherButtonTitles:@"other", nil];

UIActionSheet *sheet = [[UIActionSheet alloc] init];
ActionSheetController *actionSheet = [[ActionSheetController alloc]  initWithNibName:@"ActionSheetView" bundle:nil];    
[sheet addSubview:actionSheet.view];

[sheet showInView:self.view];
}

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


person 4thSpace    schedule 11.04.2010    source источник
comment
Является ли класс ActionSheetController вашим собственным? не могли бы вы поделиться кодом?   -  person Daniel Sanchez    schedule 08.06.2012


Ответы (4)


используйте UIActionSheetDelegate, и после этого вы можете с этим делегатом добавить, например, изображение на кнопку таблицы предупреждений

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet{

   UIImageView *sample = [[UIImageView alloc] initWithImage:[UIImage       
   imageNamed:@"Someimage.png"]];
   [actionSheet addSubView:sample];

}
person Arash Zeinoddini    schedule 19.11.2012
comment
Было бы здорово, если бы правильно. Сбой с: Нет видимого @interface для 'UIActionSheet' объявляет селектор 'addSubView:' - person mpemburn; 12.02.2013
comment
просто строчные буквы v..its [actionSheet addSubview: sample]; - person user2277872; 23.07.2013
comment
Вы можете быть осторожны с этим. Apple может это не понравиться. Из документации: UIActionSheet не предназначен для разделения на подклассы, и вам не следует добавлять представления в его иерархию. Если вам нужно представить лист с большей настройкой, чем это предусмотрено API UIActionSheet, вы можете создать свой собственный и представить его модально с помощью presentViewController: animated: Завершение :. - person Eric Goldberg; 04.03.2014

Я не верю, что вы можете указать пользовательские представления в UIActionSheet. Насколько я понимаю, вы можете отображать только заголовок и одну или несколько кнопок. Ниже приведено описание UIActionSheet в документации Apple:

Используйте класс UIActionSheet, чтобы представить пользователю набор альтернатив того, как продолжить выполнение данной задачи. Вы также можете использовать листы действий, чтобы побудить пользователя подтвердить потенциально опасное действие. Лист действий содержит необязательный заголовок и одну или несколько кнопок, каждая из которых соответствует действию, которое необходимо предпринять.

Справочник по классу UIActionSheet

person lucasweb    schedule 11.04.2010
comment
Если вы посмотрите этот пост stackoverflow.com/questions/2608239/, у меня есть ссылка на приложение zipcar, которое, похоже, использует лист настраиваемых действий. - person 4thSpace; 11.04.2010
comment
Технически то, что вы пытаетесь сделать, возможно, ведь UIActionSheet - это просто еще один тип UIView. Меня беспокоит то, что вы можете столкнуться с проблемами при отправке приложения в Apple, поскольку они ожидают, что UIActionSheet будет использоваться очень специфическим образом, как описано в iPhone HIG developer.apple.com/iphone/library/documentation / UserExperience / Рассматривали ли вы создание настраиваемого модального представления вместо попытки использовать UIActionSheet? - person lucasweb; 12.04.2010
comment
Разве контроллер модального представления не скрывал / не отключал панель навигации? - person 4thSpace; 12.04.2010
comment
Да, но и UIActionSheet тоже. Панель навигации находится за полупрозрачной накладкой. Зачем вам нужен доступ к панели навигации при отображении UIActionSheet? Он разработан специально, чтобы заставить пользователя выбрать действие или закрыть представление. Чего вы пытаетесь достичь с помощью таблицы UIActionSheet, для которой требуется встроенное настраиваемое представление? Если бы у меня было больше подробностей, я мог бы дать более развернутый ответ. - person lucasweb; 13.04.2010
comment
взгляните на мой первый комментарий выше о приложении zipcar. Вот что я пытаюсь сделать. - person 4thSpace; 13.04.2010
comment
@ 4thSpace: Верно, но вы можете встроить модальный ViewController в UINavigationController. - person nine stones; 13.11.2012

Я обнаружил, что такое поведение возникает из-за того, что я неправильно использовал конструктор UIActionSheet. Кнопки и заголовок должны быть включены:

UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:@"Date Picker" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
person 4thSpace    schedule 11.04.2010

Возможно, вы захотите проверить созданную мной альтернативу UIActionSheet, которая позволяет отображать настраиваемые представления контента без каких-либо грязных хаков: https://github.com/JonasGessner/JGActionSheet У него есть и другие преимущества перед UIActionSheet!

person JonasG    schedule 16.08.2014