Я пробовал это до того, как увидел обновленный ответ 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:, но не с объектом