Чтобы включить полное сообщение об ошибках, добавьте это в свой скрипт:
error_reporting(E_ALL);
Это приводит к появлению даже минимальных предупреждений. И на всякий случай:
ini_set('display_errors', '1');
заставит отображать ошибки. Это должно быть отключено на рабочих серверах, но не при разработке.
Ни одно из данных решений не работало для меня. Если вы не установите начальное изображение в Storyboard, вы все равно можете изменить изображение кнопки с помощью setBackgroundImage
.
Для вашего примера требуется только незначительное изменение.
NSURL *thumbURL2 = [NSURL URLWithString:@"http://example.com/thumbs/2.jpg"];
NSData *thumbData2 = [NSData dataWithContentsOfURL:thumbURL2];
UIImage *thumb2 = [UIImage imageWithData:thumbData2];
[btn2 setBackgroundImage:thumb2 forState:UIControlStateNormal];
[self.view addSubview:btn2];
Проблема заключается в TintColor. По умолчанию iOS бросает синий цвет оттенка на каждую кнопку. Вы можете обойти его тремя способами.
[button setTintColor:[UIColor blackColor]];
Это может окрасить ваше изображение так, как вы этого не хотите. [button setBackgroundImage:[UIImage...]];
UIImageView * img = [[UIImageView alloc] initWithImage:[UIImage...]];
[button addSubView:img];
Для быстрого:
let aButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton
Это сработало для меня
[myButton1 setBackgroundImage:[UIImage imageNamed:@"phones.png"] forState:UIControlStateNormal];
Примечание: перед этим сделайте снимок переднего изображения.
В iOS7 появился новый тип кнопки UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS (7_0), // стандартная системная кнопка
Проверьте свой .xib-файл и тип кнопки изменения на Custom [/g0]
Чтобы сделать это программно, добавьте эту строку в viewDidLoad
:
[UIButton buttonWithType:UIButtonTypeSystem];
[myUIButton setImage: [[UIImage imageNamed: @"myButtonImage"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal] forState: UIControlStateNormal];
(с типом кнопки, установленным в «Система» в IB).
– JWK
19 December 2013 в 00:52
Есть хороший шанс, что изображение есть, и вы просто не можете его увидеть. Попробуйте изменить тип кнопки на UIButtonTypeCustom
. Если это не работает, установите цвет фона кнопки на [UIColor clearColor];
Используя Xcode 9.2, ни одно из вышеперечисленных решений не работало для того, что я искал.
Я искал решение, которое позволит мне установить изображения .normal
и .selected
UIControlState
внутри раскадровку для исходного режима рендеринга, но внутри файла Swift не должно существовать строковых литералов относительно имен изображений.
В основном внутри вашего кода вы получите изображение, которое вы установили в своей раскадровке для .normal
состояние и повторно отобразить его как .alwaysOriginal
(То же самое для состояния .selected
), тогда вы установите это изображение (которое теперь отображается как оригинальное и не будет затронуто оттенком) для соответствующего состояния (.normal
и .selected
) вашего UIButton
.
Вот он:
// Get your .normal image (you set via your storyboard) and render it as original
let unselectedImage = yourButton.image(for: .normal)?.withRenderingMode(.alwaysOriginal)
// Set your normal image but this time rendered as original
yourButton.setImage(unselectedImage, for: .normal)
// Same for selected state
let selectedImage = yourButton.image(for: .selected)?.withRenderingMode(.alwaysOriginal)
yourButton.setImage(selectedImage, for: .selected)
Таким образом вы можете установить состояния изображения кнопок и, если имя изображения изменится, это не повлияет на ваш код.
делает цвет оттенка как clearcolor для всех четырех состояний (Default, Highlighted, selected, disabled) работал для меня.
Старая нить, но я хотел перезвонить, потому что у меня была такая же проблема. Проблема заключалась в том, что вы вызываете setImage, когда вы должны вызвать setBackgroundImage.
У меня была такая же проблема. На моей раскадровке у меня была кнопка без изображения.
Тогда я бы присвоил изображение в коде.
Пришел IOS 7, и у меня появилось много синих изображений.
Разрешение было простым, но сбивающим с толку. Если я назначаю любое изображение в раскадровке, а затем меняю изображение во время выполнения, он отлично работает.
Вы всегда должны указывать начальный образ на раскадровке, даже если вы не собираетесь его использовать.
Эта проблема называется синей проблемой цвета кнопки в xcode. Когда мы делаем кнопку по коду, кнопка показывает синий цвет оттенка по умолчанию. Это можно решить, назначив цвет оттенка черному или белым в соответствии с цветом вашей ячейки. Код:
UIImage *closebtnimg = [UIImage imageNamed:@"icon_uncheck.png"];
UIImage *closebtnimg1 = [UIImage imageNamed:@"icon_checked.png"];
Custombutton *button = [Custombutton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(52, 66, 25, 24)];
[button setBackgroundImage:closebtnimg forState:UIControlStateNormal];
[button setBackgroundImage:closebtnimg1 forState:UIControlStateSelected];
[button setTintColor:[UIColor whiteColor]];
[cell.contentView addSubview:button];
[button addTarget:self action:@selector(changeImage:) forControlEvents:UIControlEventTouchUpInside];
Кажется, что iOS 7 использует изображение, представленное как альфа-маску для отображения цвета оттенка кнопки. Изменение типа кнопки на UIButtonTypeCustom
сделало трюк для меня (спасибо user716216!). Установка изображения в качестве фона не всегда работает, если у вас уже есть фоновое изображение, как и в моем случае.
let image = UIImage(named: "my-image")
myButton.setImage(image.withRenderingMode(.alwaysOriginal), for: .normal)