Несколько красных / деструктивных кнопок UIActionSheet - PullRequest
5 голосов
/ 05 декабря 2010

Есть ли способ иметь более 1 красной «разрушительной кнопки» в UIActionSheet приложения iPhone?

Мне нужно иметь разные параметры очистки на одном листе действий: один, где он удаляет все, и один, где он удаляет меньше, поэтому оба должны быть красного цвета.

Ответы [ 4 ]

2 голосов
/ 16 декабря 2010

Я только что создал простую настраиваемую замену для UIActionSheet для iPhone, чтобы использовать в аналогичном случае. Он не использует стандартный внешний вид, но это можно изменить. Вероятно, это будет вам полезно.

https://github.com/4marcus/WMActionSheet

2 голосов
/ 05 декабря 2010

Постер этого вопроса, казалось, управлял тем, что вы хотите ... если я вас правильно понимаю.

Использует подпредставления в Alert без документов

РЕДАКТИРОВАТЬ:

Клянусь, я искал UIActionSheet в первый раз.В самом деле.http://www.nearinfinity.com/blogs/andrew_homeyer/display_a_custom_uiview_like_a.html

1 голос
/ 05 декабря 2010

На стандартном UIActionSheet нет поддерживаемых способов сделать это.Вы можете создать свою собственную замену «листа действий», используя градиентные кнопки, подобные приведенным здесь:

http://iphonedevelopment.blogspot.com/2010/05/gradient-buttons-yet-again.html

Я бы ожидал, что кто-то создал более настраиваемую замену схожих листов действий, но яне знаю ни одного с моей головы.

0 голосов
/ 06 декабря 2010

Я пробовал это до того, как увидел обновленный ответ griotspeak:

SEL getTitle = NSSelectorFromString(@"title");
SEL getBackground = NSSelectorFromString(@"background");
SEL setBackground = NSSelectorFromString(@"setBackgroundImage:");
SEL setTitleColor = NSSelectorFromString(@"setTitleColor:");
UIImage *redImage;
UIColor *titleColor;
UIColor *shadowColor;
for (NSObject *object in [action subviews]) {
    if ([[NSString stringWithFormat:@"%@", [object class]] isEqualToString:@"UIThreePartButton"]) {
        if ([[object performSelector:getTitle] isEqualToString:@"Clear all"]) {
            redImage = [object performSelector:getBackground];
            titleColor = [object performSelector:@selector(titleColor)];
            shadowColor = [object performSelector:@selector(shadowColorForState:) withObject:0];
            shadowOffset = [object performSelector:@selector(shadowOffset)];
        }
        if ([[object performSelector:getTitle] isEqualToString:@"Clear all except this month"]) {
            [object performSelector:setBackground withObject:redImage];
            [object performSelector:setTitleColor withObject:titleColor];
            [object performSelector:@selector(setShadowColor:) withObject:shadowColor];
            //[object performSelector:@selector(setShadowOffset:) withObject:CGSizeMake(-2.5,0)];
        }
    }

}

(я использую NSSelectorFromString, а не @selector (), потому что это означает, что он на самом деле не использует недокументированные вещи, вроде как, если вы понимаете, о чем я)

Это не совсем задокументировано, но я не думаю, что я использовал недокументированные методы. По сути, он берет красный фон с деструктивного фона и применяет его к другой кнопке с именем «Отмена».

Так что, если Apple изменит цвет деструктивной кнопки, то же самое произойдет и с неразрушающим-деструктивным без обновления. Хотя он не использует особо безопасные для Apple методы.

У меня есть небольшая проблема с закомментированной строкой выше, если вы можете помочь, пожалуйста, ответьте здесь: executeSelector: withObject:, но не с объектом

...