В iOS 6 SDK я написал следующие строки кода для отображения изображения внутри кнопки:
NSURL *thumbURL2 = [NSURL URLWithString:@"http://example.com/thumbs/2.jpg"];
NSData *thumbData2 = [NSData dataWithContentsOfURL:thumbURL2];
UIImage *thumb2 = [UIImage imageWithData:thumbData2];
[btn2 setImage:thumb2 forState:UIControlStateNormal];
[self.view addSubview:btn2];
Но теперь с Xcode 5 и iOS 7 это не работает. Кнопка не содержит изображение. Кнопка заполнена синим цветом.
Ответы:
В iOS7 появился новый тип кнопки с именем UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS (7_0), // стандартная системная кнопка
Проверьте файл .xib и измените тип кнопки на Пользовательский
Чтобы сделать это программно, добавьте эту строку в
viewDidLoad
:источник
[myUIButton setImage: [[UIImage imageNamed: @"myButtonImage"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal] forState: UIControlStateNormal];
(с типом кнопки, установленным в «Система» в IB).Кажется, iOS 7 использует изображение, предоставленное в качестве альфа-маски, для отображения цвета оттенка кнопки. Изменение типа кнопки
UIButtonTypeCustom
сделало свое дело для меня (спасибо user716216!). Установка изображения в качестве фона не всегда работает, если у вас уже есть фоновое изображение, как было в моем случае.источник
Свифт 3, 4, 5:
источник
Есть хороший шанс, что изображение есть, и вы просто не можете его увидеть. Попробуйте изменить тип кнопки на
UIButtonTypeCustom
. Если это не сработает, установите цвет фона кнопки на[UIColor clearColor];
источник
Проблема в TintColor. По умолчанию iOS выделяет синий оттенок над каждой кнопкой. Вы можете обойти это через 3 способа.
Изменить цвет оттенка.
[button setTintColor:[UIColor blackColor]];
Это может привести к окрашиванию вашего изображения так, как вы этого не хотите.Как и большинство других предложенных, установите фоновое изображение.
[button setBackgroundImage:[UIImage...]];
Добавьте UIImageView к вашей кнопке.
UIImageView * img = [[UIImageView alloc] initWithImage:[UIImage...]];
[button addSubView:img];
источник
Для быстрой:
источник
Я была такая же проблема. На моей раскадровке у меня была кнопка без какого-либо изображения.
Я бы тогда назначил изображение в коде.
Пришел IOS 7, и я получил много синих изображений.
Решение было простым, но запутанным. Если я назначу какое-либо изображение на раскадровке, а затем изменю изображение во время выполнения, оно будет работать нормально.
Вы всегда должны указывать начальное изображение на раскадровке, даже если вы не собираетесь его использовать.
источник
Это сработало для меня
Примечание: перед этим снимите переднее изображение.
источник
Старая тема, но я хотел вмешаться, потому что у меня была та же проблема. Проблема была в том, что вы вызываете setImage, когда вам нужно вызвать setBackgroundImage.
источник
Ни одно из данных решений не помогло мне. Если вы не установите исходное изображение в раскадровке, вы все равно можете изменить изображение кнопки с помощью
setBackgroundImage
.Для вашего примера требуется лишь незначительное изменение.
источник
Эта проблема называется проблемой синего цвета кнопки в xcode. Когда мы создаем кнопку за кодом, кнопка показывает синий оттенок по умолчанию. Это можно решить, назначив цвет оттенка черному или белому в соответствии с цветом вашей ячейки. Код является:
источник
Используя Xcode 9.2, ни одно из вышеперечисленных решений не сработало для того, что я искал.
Я искал решение, которое позволило бы мне устанавливать
.normal
и.selected
UIControlState
изображения внутри раскадровки для их исходного режима рендеринга , но внутри файла Swift не должно быть никаких строковых литералов относительно имен изображений.По сути, внутри вашего кода вы получите изображение, которое вы установили внутри раскадровки для
.normal
состояния, и повторно отобразите его как.alwaysOriginal
(То же самое для.selected
состояния), затем вы установите это изображение (которое теперь отображается как оригинальное и не будет зависеть от оттенок) для соответствующего состояния (.normal
и.selected
) вашегоUIButton
.Вот:
Таким образом, вы можете установить состояние изображения кнопки, и если имя изображения изменится, это не повлияет на ваш код.
источник
В iOS 13 - просто установите для свойства Tint значение White, сохраняя тип UIButton как Custom
источник
создание цвета оттенка в качестве прозрачного цвета для всех четырех состояний (по умолчанию, выделено, выбрано, отключено) работало для меня.
источник
В Swift 4 инициализируйте ваш
UIButton
и назначьте данные изображения следующим образом:источник