Встановлення зображення для коду UIButton у коді


196

Як встановити зображення для коду UIButton у коді?

У мене це:

UIButton *btnTwo = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
btnTwo.frame = CGRectMake(40, 140, 240, 30);
[btnTwo setTitle:@"vc2:v1" forState:UIControlStateNormal];
[btnTwo addTarget:self action:@selector(goToOne) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnTwo];

але не бачите, що встановить для нього зображення

Відповіді:


399

Ціль-С

UIImage *btnImage = [UIImage imageNamed:@"image.png"];
[btnTwo setImage:btnImage forState:UIControlStateNormal];

Швидкий 5.1

let btnImage = UIImage(named: "image")
btnTwo.setImage(btnImage , for: .normal)

1
Як сторонне позначення: це покаже зображення, але текст заголовка кнопки буде приховано.
leviathan

Це код повністю працює, але я отримую зображення з розбором, тому як я можу це зробити, оскільки цей код працює для мене у випадку UIImage: - largePick.image = aNewsInfo.smallImageData; як я можу це зробити з UIButton ... Ви можете мені допомогти ...
user755278

1
@slcott, де зазначена документація ? Я не бачу, що це ніде не припускає, що setImageзастаріло. (Мені здається , ви плутаєте UIButton.setImageз UITableViewCell.image, яка є власністю засуджується , як ви заявили.)
Кірк Волл

12
Увага: Якщо ви використовуєте що-небудь інше, ніж UIButtonTypeCustom, зображення стане синім у iOS7 та 8.
Apfelsaft

2
Для Swift 3: btnTwo.setImage (btnImage, за: UIControlState.normal)
Міхей Монтоя,

57

Рішення Майка просто покаже зображення, але будь-який заголовок, встановлений на кнопці, не буде видно, тому що ви можете встановити заголовок або зображення.

Якщо ви хочете встановити обидва (ваше зображення та заголовок), використовуйте наступний код:

btnImage = [UIImage imageNamed:@"image.png"];
[btnTwo setBackgroundImage:btnImage forState:UIControlStateNormal];
[btnTwo setTitle:@"Title" forState:UIControlStateNormal];

2
яка різниця між setImage та setBackgroundImage ?
onmyway133

3
setBackgroundImage розтягне зображення на ширину кнопки над текстом заголовка, тоді як setImage зробить кнопку зображення ігноруючи текст заголовка, не розтягуючи зображення.
Ернест

21

Перш ніж це не спрацювало для мене, мені довелося чітко змінити розмір рамки кнопок на основі розміру рамки зображення.

UIImage *listImage = [UIImage imageNamed:@"list_icon.png"];
UIButton *listButton = [UIButton buttonWithType:UIButtonTypeCustom];

// get the image size and apply it to the button frame
CGRect listButtonFrame = listButton.frame;
listButtonFrame.size = listImage.size;
listButton.frame = listButtonFrame;

[listButton setImage:listImage forState:UIControlStateNormal];
[listButton addTarget:self.navigationController.parentViewController 
               action:@selector(revealToggle:) 
     forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *jobsButton = 
  [[UIBarButtonItem alloc] initWithCustomView:listButton];

self.navigationItem.leftBarButtonItem = jobsButton;

@jrasmusson просто хотів додати, що 3 рядки, що співпадають з кадром, також можуть бути написані[listButton sizeToFit]
bk138

10

У випадку користувача Swift

// case of normal image
let image1 = UIImage(named: "your_image_file_name_without_extension")!
button1.setImage(image1, forState: UIControlState.Normal) 

// in case you don't want image to change when "clicked", you can leave code below
// case of when button is clicked
let image2 = UIImage(named: "image_clicked")!
button1.setImage(image2, forState: UIControlState.Highlight) 

9

Ви можете це зробити так

[btnTwo setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];

9
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(0, 0, 150, 44);
[btn setBackgroundImage:[UIImage imageNamed:@"buttonimage.png"] 
               forState:UIControlStateNormal];
[btn addTarget:self 
     action:@selector(btnSendComment_pressed:) 
     forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];

8

Ви можете розмістити зображення будь-яким способом:

UIButton *btnTwo = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
btnTwo.frame = CGRectMake(40, 140, 240, 30);
[btnTwo setTitle:@"vc2:v1" forState:UIControlStateNormal];
[btnTwo addTarget:self 
           action:@selector(goToOne) 
 forControlEvents:UIControlEventTouchUpInside];


[btnTwo setImage:[UIImage imageNamed:@"name.png"] forState:UIControlStateNormal];

//OR setting as background image

[btnTwo setBackgroundImage:[UIImage imageNamed:@"name.png"] 
                  forState:UIControlStateNormal];

[self.view addSubview:btnTwo];

Ця частина коду мене збентежила. <code> btnImage = [UIImage imageNamed: @ "image.png"]; </code> Що таке btnImage? Це не було в оригінальному коді. Це нова кнопка?
Майк Мартін

ви можете безпосередньо встановити зображення кнопки замість того, щоб взяти такий об’єкт зображення, як цей: [btnTwo setImage: [UIImage imageNamed: @ "image.png"]];
Аджай Шарма

у вас повинен бути buttonWithType: UIButtonTypeRoundedRect to UIButtonTypeCustom інша мудра кнопка не відображатиметься відповідно до вашого зображення.
Praveen-K

2

Я шукав рішення, як додати UIImageмоє UIButton. Проблема полягала лише в тому, що вона відображає зображення більше, ніж потрібно. Просто допоміг мені в цьому:

_imageViewBackground = [[UIImageView alloc] initWithFrame:rectImageView];
_imageViewBackground.image = [UIImage imageNamed:@"gradientBackgroundPlain"];
[self addSubview:_imageViewBackground];
[self insertSubview:_imageViewBackground belowSubview:self.label];
_imageViewBackground.hidden = YES;

Кожен раз , коли я хочу показати мій UIImageViewя просто встановити вар hiddenна YESабо NO. Можуть бути й інші рішення, але я стільки разів плутався з цим матеріалом, і це вирішило його, і мені не потрібно було мати справу з внутрішніми справами UIButton, які роблять у фоновому режимі.


2

Не хвилюйтеся так сильно обрамляючи кнопку з коду, це можна зробити на аркуші розкадрування. Це працювало для мене, один рядок ... простіше.

[self.button setBackgroundImage:[UIImage imageNamed: @"yourPic.png"] forState:UIControlStateNormal];

2
-(void)buttonTouched:(id)sender
{
    UIButton *btn = (UIButton *)sender;

    if( [[btn imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"icon-Locked.png"]])
    {
        [btn setImage:[UIImage imageNamed:@"icon-Unlocked.png"] forState:UIControlStateNormal];
        // other statements....
    }
    else
    {
        [btn setImage:[UIImage imageNamed:@"icon-Locked.png"] forState:UIControlStateNormal];
        // other statements....
    }
}

2

Версія Swift 3 (butt_img має бути зображенням, встановленим у папці Assets.xcassets або Images.xcassets у Xcode):

btnTwo.setBackgroundImage(UIImage(named: "butt_img"), for: .normal)
btnTwo.setTitle("My title", for: .normal)

У будь-якому випадку, якщо ви хочете, щоб зображення масштабувалося, щоб воно заповнило розмір кнопки, ви можете додати UIImageViewїї та призначити своє зображення:

let img = UIImageView()
img.frame = btnTwo.frame
img.contentMode = .scaleAspectFill
img.clipsToBounds = true
img.image = UIImage(named: "butt_img")
btnTwo.addSubview(img)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.