UIButton setImage не работает - PullRequest
       1

UIButton setImage не работает

19 голосов
/ 27 января 2012

Я схожу с ума по этому поводу.У меня UIButton подключен как Outlet.Я хочу изменить это изображение.В функции viewDidLoad я пытаюсь установить изображение так:

[button1 setImage:[UIImage imageNamed:@"house.png"] forState:UIControlStateNormal];

Ничего не происходит.Однако, если я использую ImagePicker, он как-то работает.В функции ImagePickers "didFinishPickingImage" я повторяю ту же команду, что и выше, для установки изображения, и оно работает, изображение отображается нормально.

Я думал, что, возможно, изображение кнопки не обновляется само по себе,но попытка вызвать [button1 setNeedsDisplay], или [button1.imageView setNeedsDisplay], или даже [button1.imageView.image setNeedsDisplay] ничего не делает.

У кого-нибудь есть идеи по этому поводу?Я уже потратил два часа впустую, и я действительно расстроен, потому что я уверен, что причина должна быть настолько глупой, что это невероятно.

Ответы [ 11 ]

80 голосов
/ 28 февраля 2014

Пожалуйста, проверьте тип вашей кнопки.

Если ваш тип кнопки "Системный", вы должны изменить его на "Пользовательский"

8 голосов
/ 27 января 2012

Здесь нужно сделать две вещи:

# 1, измените код на:

[button1 setImage:[UIImage imageNamed:@"house.png"] forState:UIControlStateNormal];

и # 2

, чтобы убедиться, что ваш UIImage возвращает действительное изображение.

Другими словами,

UIImage * imageToSet = [UIImage imageNamed: @"house.png"];
if(imageToSet)
{
    [button1 setImage:[UIImage imageNamed:@"house.png"] forState:UIControlStateNormal];
} else {
    // if you see this line in your console, then you know where to look for a problem
    NSLog( @"why is my image object nil?");
}
6 голосов
/ 27 января 2012

для тех, кто окажется в подобной ситуации;Я использовал упомянутую кнопку внутри пользовательской ячейки для просмотра таблицы.Однако ячейки загружаются не сразу (т. Е. Внутри viewDidLoad / viewWillAppear и т. Д.), А внутри функции tableView: cellForRowAtIndexPath.Все мои переменные кнопки в этот момент были равны нулю.Мое решение состояло в том, чтобы загрузить изображение после того, как ячейка была создана, и она сразу же сработала.

3 голосов
/ 09 июня 2015

Вот пара дополнительных заметок.UIButton setImage: forState: правильный метод:

[button1 setImage:[UIImage imageNamed:@"house.png"] forState:UIControlStateNormal];

imageNamed - это удобный метод для захвата изображения, но убедитесь, что он возвращает объект.Забыв включить файл изображения в текущую цель, я постоянно получаю.

[UIImage imageNamed:@"house.png"] 

Вам также не нужно расширение.SDK работает с этим.

[UIImage imageNamed:@"house"] 

И даже если UIControlState является битовой маской, вы не можете ИЛИ значения вместе.Это не не работает, и я должен помнить об этом, потому что он получает меня каждый раз, когда я использую вызов.

// NO NO NO
[button1 setImage:[UIImage imageNamed:@"house"] forState:UIControlStateNormal|UIControlStateSelected]; 

// YES
[button1 setImage:[UIImage imageNamed:@"house"] forState:UIControlStateNormal];
[button1 setImage:[UIImage imageNamed:@"house"] forState:UIControlStateSelected]; 
2 голосов
/ 13 августа 2014

Получала ту же проблему, когда UIbutton был в UITableViewCell.

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:[UIImage imageNamed:@"detail.png"] forState:UIControlStateNormal];

должно работать в UITableViewCell

0 голосов
/ 09 ноября 2017

Использовать setBackgroundImage: forState:

0 голосов
/ 19 сентября 2017

В моем случае он рисуется с помощью пользовательского кода анимации, а не устанавливается изображением, поэтому он не работает при установке какого-либо изображения, он должен изменить код анимации.

0 голосов
/ 16 января 2016

Это происходит потому, что состояние кнопки не остается выбранным после щелчка по умолчанию. Я решил это, сделав IBaction по нажатию этой кнопки и переключив выбранное состояние. -(IBAction) checkButtonClicked:(id)sender{ checkButton.selected = !checkButton.selected; }

0 голосов
/ 06 августа 2015

Последнее, что вы хотите проверить - убедитесь, что вы устанавливаете изображение в главном потоке!Просто столкнулся с проблемой, когда я устанавливал изображение кнопки в обратном вызове из ALAssetLibrary (выборка изображений из библиотеки фотографий).Изображение не будет обновляться, пока я не нажму кнопку.Оказывается, что обратный вызов происходил вне основного ...

0 голосов
/ 19 ноября 2013

Полагаю, не создавайте так UIButton * nextButton = [UIButton buttonWithType: UIButtonTypeRoundedRect];этим методом создания UIButton создается с использованием типа по умолчанию, поэтому фоновое изображение не работает.попробуйте это, UIButton * nextButton = [[UIButton alloc] initWithFrame: CGRectMake (9, 154, 300, 48)];или другое, кроме buttonWithType

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...