tintColor на UIActionSheet (или UIAlertView) (iOS 7+)

Възможно ли е да има бутони в UIActionSheet в tintColor цвят на iOS 7? Искам да кажа, че ако приложението ми е с марка tintColor, например червено, не искам сини бутони в листа с действия. Същото и с UIAlertView.


person user500    schedule 24.10.2013    source източник
comment
stackoverflow.com/questions/16713307/   -  person John Riselvato    schedule 25.10.2013
comment
Джон Ризелвато е прав, като се свързва с отговора, Не, нито UIAlertView, нито UIActionSheet са проектирани от Apple да бъдат подкласове. За персонализиран външен вид трябва да навиете свой собствен.   -  person ryan cumley    schedule 25.10.2013
comment
stackoverflow.com/questions/4248400/uiactionsheet-buttons-color/   -  person Rymnel    schedule 29.10.2013
comment
github.com/gloomcore/UICustomActionSheet   -  person Gloomcore    schedule 13.02.2014


Отговори (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.

person Adam Waite    schedule 11.02.2014
comment
Трябва да използвате следния метод, за да актуализирате цвета на заглавието на бутона: [button setTitleColor:[UIColor greenColor] forState:UIControlStateNormal]; - person Brody Robertson; 12.03.2014

Възможно е. Ето едно бързо внедряване за 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

Преди да покажете, задайте цвета на нюанса на листа с действия по ваш вкус.

В тази реализация избрах да запазя заглавието на разрушителния бутон като червено, но това може да бъде променено.

person Leo Natan    schedule 24.10.2013

Моля, погледнете моя дъщерен клас UICustomActionSheet. Току-що пуснах най-новите промени, които позволяват правилно показване на стила за дизайна на iOS6 и iOS7. https://github.com/gloomcore/UICustomActionSheet

Можете да зададете цветовете, шрифтовете, цветовете на текста и изображенията за всеки бутон. Работи добре както за iPhone, така и за iPad. Компонентът е абсолютно безопасен за Appstore, така че можете да го използвате във вашите приложения. Наслади се!

person Gloomcore    schedule 12.02.2014