В моем проекте я использую UIActionSheet
для отображения для некоторого типа сортировки. Я хочу изменить цвет текста, отображаемого в кнопках панели действий. Как мы можем изменить цвет текста?Изменение цвета текста в кнопках UIActionSheet
ответ
IOS 8:UIActionSheet
осуждается. UIAlertController
уважает -[UIView tintColor]
, так это работает:
alertController.view.tintColor = [UIColor redColor];
еще лучше, установить оттенок цвета всего окна в вашем приложении делегат:
self.window.tintColor = [UIColor redColor];
прошивкой 7: в своем действии лист делегата реализации -willPresentActionSheet:
в следует:
- (void)willPresentActionSheet:(UIActionSheet *)actionSheet
{
for (UIView *subview in actionSheet.subviews) {
if ([subview isKindOfClass:[UIButton class]]) {
UIButton *button = (UIButton *)subview;
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
}
}
}
EDIT
Вот аналогичный вопрос: How to customize Buttons in UIActionSheet?
Попробуйте использовать протокол appearance
[НЕ РАБОТАЮ]
UIButton *btn = [UIButton appearanceWhenContainedIn:[UIActionSheet class], nil];
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
Если вы хотите пройти через UIActionSheet
, вы не должны прямо устанавливать цвет текста UILabel
, но вместо этого используйте метод setTitleColor:forState
. В противном случае начальный цвет будет установлен на такие события, как UIControlEventTouchDragOutside, например.
Вот правильный способ сделать это, повторное использование кода в СИЦ:
- (void)willPresentActionSheet:(UIActionSheet *)actionSheet
{
for (UIView *subview in actionSheet.subviews) {
if ([subview isKindOfClass:[UIButton class]]) {
UIButton *button = (UIButton *)subview;
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
}
}
}
Хороший звонок, Джонатан. – jrc
решение @jrc работает, но изменения цвета titleLabel при нажатии на кнопку. Попробуйте, чтобы он сохранял один и тот же цвет во всех состояниях.
- (void)willPresentActionSheet:(UIActionSheet *)actionSheet
{
UIColor *customTitleColor = [UIColor greenColor];
for (UIView *subview in actionSheet.subviews) {
if ([subview isKindOfClass:[UIButton class]]) {
UIButton *button = (UIButton *)subview;
[button setTitleColor:customTitleColor forState:UIControlStateHighlighted];
[button setTitleColor:customTitleColor forState:UIControlStateNormal];
[button setTitleColor:customTitleColor forState:UIControlStateSelected];
}
}
}
UIAppearance может справиться с этим:
[[UIButton appearanceWhenContainedIn:[UIActionSheet class], nil] setTitleColor:[UIColor cyanColor] forState:UIControlStateNormal];
Намного проще, чем идти через подвидов, но я не проверял это решение на IOS 6 или более ранних версий.
Жаль. не работает на iOS 7 и выше. –
В iOS 8 все это не работает. Текст UIActionSheet, кажется, получает свой цвет из window.tintColor.
вы нашли обходное решение? –
Извините за поздний ответ. Мое обходное решение состояло в том, чтобы остановить изменение window.tintColor или self.view.tintColor на белый. Вместо этого я теперь явно устанавливаю любые элементы, которым нужен белый tintColor, вместо того, чтобы полагаться на родительский вид tintColors. – lifjoy
Nice post! так как все время задавались вопросом, почему мои 'UIAlertViews' и' UIAlertController' появляются в 'whiteColor'. –
Это работает для меня в iOS8 использование
[[UIView appearanceWhenContainedIn:[UIAlertController class], nil] setTintColor:[UIColor redColor]];
Это изменит цвет всех кнопок, включая кнопку отмены. Есть ли способ изменить цвет на красный, но не на кнопку отмены? – etayluz
это для ИОС 8 и выше
SEL selector = NSSelectorFromString(@"_alertController");
if ([actionSheet respondsToSelector:selector])
{
UIAlertController *alertController = [actionSheet valueForKey:@"_alertController"];
if ([alertController isKindOfClass:[UIAlertController class]])
{
alertController.view.tintColor = [UIColor blueColor];
}
}
else
{
// use other methods for iOS 7 or older.
}
Может быть поздний ответ, но я полагаю, что это может помочь кому-то.
IOS 8: Вы могли бы просто инициализировать UIAlertAction со стилем: UIAlertActionStyleDestructive так:
UIAlertAction *delete = [UIAlertAction actionWithTitle:@"Delete" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action){
// your code in here
}];
Это сделает баттона текст красным по умолчанию.
Soulution для Swift 3. Изменяет все цвета.
UIView.appearance(whenContainedInInstancesOf: [UIAlertController.self]).tintColor = .yellow
- 1. Изменение цвета текста на кнопках отправки/отмена на MFMailComposeViewController
- 2. Изменение цвета PNG в кнопках - ИОС
- 3. Изменение цвета кнопок и символов кнопки UIActionSheet
- 4. Изменение цвета/текста цвета SLComposeSheetConfigurationItem
- 5. Изменение цвета текста datepicker
- 6. Изменение цвета текста UILabel
- 7. Изменение цвета выделенного текста
- 8. Изменение цвета текста UITableViewCell
- 9. изменение цвета текста uitabbaritem
- 10. Изменение цвета текста
- 11. Изменение цвета текста эха?
- 12. Изменение цвета текста div
- 13. изменение цвета текста xamdatagrid
- 14. Изменение цвета динамического текста
- 15. Изменение цвета текста InfoWindow
- 16. Изменение цвета текста ListView?
- 17. изменение цвета Hover текста
- 18. UILabel текста Изменение цвета
- 19. Изменение цвета текста
- 20. Изменение цвета текста ListView
- 21. Изменение цвета текста NSTokenField
- 22. Изменение цвета текста в опции
- 23. Изменение цвета текста в MPMoviePlayerController
- 24. Изменение цвета текста в UINavigationBar
- 25. Изменение цвета текста в WebView?
- 26. Изменение цвета текста в JTable
- 27. Изменение цвета текста в Iframe
- 28. Изменение цвета текста в Greasemonkey
- 29. Изменение цвета текста в ListView
- 30. Изменение цвета текста в bootstrap
Это работает только по умолчанию. Если вы нажмете кнопку, она будет синим цветом на titleLabel. – seufagner
Спасибо. Попробуйте вместо [button setTitleColor: fooColor forState: UIControlStateNormal]. – jrc
Это просто не работает на симуляторе iPhone. –