Я обнаружил, что это расширение категории работает в ios7.1 для добавления изображения / значка к кнопкам в UIActionSheet с некоторыми оговорками ...
@interface UIActionSheet (GSBActionSheetButtons)
- (void)buttonAtIndex:(NSUInteger)index setImage:(UIImage *)image forState:(UIControlState)state;
@end
@implementation UIActionSheet (GSBActionSheetButtons)
- (void)buttonAtIndex:(NSUInteger)index setImage:(UIImage *)image forState:(UIControlState)state
{
for (UIView* view in self.subviews) {
if ([view isKindOfClass:[UIButton class]]) {
if (index-- == 0) {
UIButton *button = (UIButton*)view;
[button setImage:image forState:state];
button.imageView.contentMode = UIViewContentModeScaleAspectFit;
button.imageEdgeInsets = UIEdgeInsetsMake(2,0,2,0);
break;
}
}
}
}
И использовать его:
[self.sharePopup buttonAtIndex:2 setImage:[UIImage imageNamed:@"twitter.png"] forState:UIControlStateNormal];
Предостережения:
Несмотря на то, что UIActionSheet корректно автоматически изменяет размер вашего изображения вправо высота для кнопки, оно, по-видимому, не изменяет соответственно представление изображения ширина ; отсюда необходимость UIViewContentModeScaleAspectFit для предотвращения сжатия изображения. Однако ширина рамки просмотра изображения по-прежнему является исходной полноразмерной, поэтому, если ваше изображение было большим (или, точнее, широким), вы получите досадный разрыв между центрированным (уменьшенным) изображением и текстом кнопки. Я не нашел способ обойти это; даже программное добавление явного ограничения width = height к представлению изображения, похоже, игнорируется !? [есть идеи?]. Итог: убедитесь, что ваше изображение имеет правильную высоту для начала (например, около 45 пикселей на iPhone 4S), иначе вы получите все больший разрыв между изображением кнопки и текстом.
Более серьезно: как только вы добавляете изображение к кнопке, UIActionSheet, по-видимому, автоматически приводит к тому, что текст кнопки становится полужирным (!). Я не знаю почему и не знаю, как предотвратить это [какие-либо идеи?]
Наконец, это решение основано на том, что подпредставления UIActionSheet расположены в том же порядке, в котором индексируются кнопки. Это верно для нескольких кнопок, но (очевидно), когда у вас есть много элементов в вашем UIActionSheet, Apple ломает голову с индексированием [но у вас все равно будут проблемы с этим в actionSheet: clickedButtonAtIndex: когда вы попытаетесь выяснить какая кнопка была нажата ...]
О, imageEdgeInsets: необязательно - я вставляю каждое изображение на пару пикселей внутри кнопки, чтобы изображения не касались друг друга по вертикали.
[Мнение: учитывая вышеперечисленные странности, я чувствую, что Apple действительно не хочет, чтобы люди дурачились с их листами действий. В какой-то момент вам, вероятно, придется прикусить пулю и просто реализовать собственное модальное всплывающее окно; эти UIActionSheets могут вместить только столько людей ...]