Я использую код:
{ randomstatus=0; msg=[[NSString alloc]initWithFormat:@"Good job, do you want to continue?"]; UIActionSheet *actionSheet=[[UIActionSheet alloc]initWithTitle:msg delegate:self cancelButtonTitle:@"No" destructiveButtonTitle:@"Yes" otherButtonTitles:nil]; [actionSheet showInView:self.view]; [actionSheet release]; [msg release]; }
Я не хочу изменять код, но мне нужен "destructiveButton" для зеленого вместо красного. Действительно ли это возможно, или я должен использовать другую кнопку?
К сожалению, нет никаких официально предоставленных методов для настройки кнопок UIActionSheet.
Однако вы можете получить доступ к вложенным представлениям UIActionSheet (что может сломаться в будущем обновлении iPhone OS), или добавить новое представление с кнопкой, которая закрывает исходную кнопку разрушительного действия (опять же, это может сломаться).
Хотя изменение цвета кнопки на листе UIActionSheet не имеет прямого отношения к этому вопросу, предыдущий вопрос: iPhone Отключение кнопок UIActionSheet демонстрирует несколько способов добавления пользовательских представлений в UIActionSheet.
Не существует "стандартного" способа изменения внешнего вида кнопок. Любые способы, которые вы используете, по сути, будут хаками и могут сломаться в будущем, если Apple изменит компонент UIActionSheet. Они также могут привести к тому, что ваше приложение будет отклонено, если они расстроят богов App-Store.
Я думаю, что самый надежный способ добиться этого - создать свой собственный класс листа действий с нуля, то есть не подклассифицировать UIActionSheet (так как это может сломаться в будущем). Хотя это может быть немного сложнее, чем какой-то хак, дополнительная гибкость, которую вы получите, пригодится вам в будущем.
Это не должно быть слишком сложно. Вам понадобится вид, который является фоном для листа действий, который можно получить, сделав скриншот стандартного UIActionSheet и немного пофотошопив. Затем добавьте ваши пользовательские кнопки в качестве вложенных представлений. Немного анимации при вызове представления, и все готово.
Я бы стремился к тому, чтобы ваш класс реализовывал все методы UIActionSheet, а также выполнял методы, которые ожидает UIActionSHeetDelegate. Таким образом, вы сможете подставить его в любое место, где в противном случае вы бы использовали родной UIActionSheet
.