Възможно ли е да има бутони в UIActionSheet
в tintColor
цвят на iOS 7? Искам да кажа, че ако приложението ми е с марка tintColor
, например червено, не искам сини бутони в листа с действия. Същото и с UIAlertView
.
tintColor на UIActionSheet (или UIAlertView) (iOS 7+)
Отговори (3)
Искам да подчертая, че това нарушава правилата на Apple, но това работи:
- (void)willPresentActionSheet:(UIActionSheet *)actionSheet
{
[actionSheet.subviews enumerateObjectsUsingBlock:^(UIView *subview, NSUInteger idx, BOOL *stop) {
if ([subview isKindOfClass:[UIButton class]]) {
UIButton *button = (UIButton *)subview;
button.titleLabel.textColor = [UIColor greenColor];
NSString *buttonText = button.titleLabel.text;
if ([buttonText isEqualToString:NSLocalizedString(@"Cancel", nil)]) {
[button setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
}
}
}];
}
(съответства на UIActionSheetDelegate
)
Все още не е изпробван UIAlertView.
Възможно е. Ето едно бързо внедряване за iOS7:
@interface LNActionSheet : UIActionSheet
{
NSString* _destructiveButtonTitle;
UIColor* _customtintColor;
}
@end
@implementation LNActionSheet
- (id)initWithTitle:(NSString *)title delegate:(id<UIActionSheetDelegate>)delegate cancelButtonTitle:(NSString *)cancelButtonTitle destructiveButtonTitle:(NSString *)destructiveButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ...
{
self = [super initWithTitle:title delegate:delegate cancelButtonTitle:cancelButtonTitle destructiveButtonTitle:destructiveButtonTitle otherButtonTitles:nil];
if(self)
{
va_list list;
va_start(list, otherButtonTitles);
for(NSString* title = otherButtonTitles; title != nil; title = va_arg(list, NSString*))
{
[self addButtonWithTitle:title];
}
va_end(list);
_destructiveButtonTitle = destructiveButtonTitle;
}
return self;
}
- (void)setTintColor:(UIColor *)tintColor
{
_customtintColor = tintColor;
}
-(void)tintColorDidChange
{
[super tintColorDidChange];
for(id subview in self.subviews)
{
if([subview isKindOfClass:[UIButton class]])
{
UIButton* button = subview;
if(![button.titleLabel.text isEqualToString:_destructiveButtonTitle])
{
[button setTitleColor:_customtintColor forState:UIControlStateNormal];
}
}
}
}
@end
Преди да покажете, задайте цвета на нюанса на листа с действия по ваш вкус.
В тази реализация избрах да запазя заглавието на разрушителния бутон като червено, но това може да бъде променено.
Моля, погледнете моя дъщерен клас UICustomActionSheet. Току-що пуснах най-новите промени, които позволяват правилно показване на стила за дизайна на iOS6 и iOS7. https://github.com/gloomcore/UICustomActionSheet
Можете да зададете цветовете, шрифтовете, цветовете на текста и изображенията за всеки бутон. Работи добре както за iPhone, така и за iPad. Компонентът е абсолютно безопасен за Appstore, така че можете да го използвате във вашите приложения. Наслади се!