Встановлення зображення для коду 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.