Створіть кнопку програмно і встановіть фонове зображення


75

Коли я намагаюся створити кнопку та встановити фонове зображення в Swift:

let button   = UIButton.buttonWithType(UIButtonType.System) as UIButton
    button.frame = CGRectMake(100, 100, 100, 100)
    button.setImage(IMAGE, forState: UIControlState.Normal)
    button.addTarget(self, action: "btnTouched:", forControlEvents: UIControlEvents.TouchUpInside)

    self.view.addSubview(button)

Я завжди отримую повідомлення про помилку: " Не вдається перетворити тип виразу" Void "у тип" UIImage " ".


Чи можете ви показати код, де заявляєте IMAGE?
— 67cherries

2
Як ви створюєте образ? Можливо, потрібно розгорнути його ЗОБРАЖЕННЯ!
— Алекс Рейнольдс,

1
IMAGEмає виглядати якUIImage(named: "name")
— Даніель

Дякую, це працює! Я лише сказав: "button.setImage (" CircleTap ", forState: UIControlState.Normal)", але зараз це працює ідеально
— Гарі,

Відповіді:


139

Ваш код повинен виглядати нижче

let image = UIImage(named: "name") as UIImage?
let button   = UIButton(type: UIButtonType.Custom) as UIButton
button.frame = CGRectMake(100, 100, 100, 100)
button.setImage(image, forState: .Normal)
button.addTarget(self, action: "btnTouched:", forControlEvents:.TouchUpInside)
self.view.addSubview(button)

2
Я думаю, це насправді має бути as? UIImage Ваша версія вийде з ладу, якщо imageNamed:поверне нуль.
— Девід Беррі,

3
Ну, це ваша вина, якщо його нуль, але ви можете додати? але тоді вам доведеться про це також знати setImage. Я думаю, це залежить від того, наскільки оборонний ви хочете отримати, і оскільки ви контролюєте місцевий актив, не повинно бути сюрпризу з юніт-тестом або двома
— Алекс Рейнольдс

1
А як щодо зображень кіл?
— Користувач

Спробуйте додати? as UIImage?
— Алекс Рейнольдс,

4
змініть тип кнопки на Власний, якщо ви не хочете бачити синю кнопку = UIButton.buttonWithType (UIButtonType.Custom) як
— UIButton

26

Спробуйте нижче:

let image = UIImage(named: "ImageName.png") as UIImage
var button   = UIButton.buttonWithType(UIButtonType.System) as UIButton
button.frame = CGRectMake(100, 100, 100, 100)
button .setBackgroundImage(image, forState: UIControlState.Normal)
button.addTarget(self, action: "Action:", forControlEvents:UIControlEvents.TouchUpInside)
menuView.addSubview(button)

Повідомте мене, працює це чи ні?


вам слід встановити buttonWithType на UIButtonType.Custom, а не на System, поки зображення не з’явиться
— sazz

9

SWIFT 3 Версія відповіді Алекса Рейнольдса

let image = UIImage(named: "name") as UIImage?
let button = UIButton(type: UIButtonType.custom) as UIButton
button.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
button.setImage(image, for: .normal)
button.addTarget(self, action: Selector("btnTouched:"), for:.touchUpInside)
        self.view.addSubview(button)

8

Swift 5 версія прийнятої відповіді:

let image = UIImage(named: "image_name")
let button = UIButton(type: UIButton.ButtonType.custom)
button.frame = CGRect(x: 100, y: 100, width: 200, height: 100)
button.setImage(image, for: .normal)
button.addTarget(self, action: #selector(function), for: .touchUpInside)

//button.backgroundColor = .lightGray
self.view.addSubview(button)

де звичайно

@objc func function() {...}

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

// In this case image is 40 wide and aligned to the left
button.imageEdgeInsets = UIEdgeInsets(top: 5, left: 5, bottom: 5, right: button.frame.width - 45)

6

Вам потрібно перевірити, щоб зображення не було нульовим, перш ніж призначити його кнопці.

Приклад:

let button   = UIButton.buttonWithType(UIButtonType.System) as UIButton
button.frame = CGRectMake(100, 100, 100, 100)
if let image  = UIImage(named: "imagename.png") {
    button.setImage(image, forState: .Normal)
}

button.addTarget(self, action: "btnTouched:", forControlEvents:.TouchUpInside)
self.view.addSubview(button)

Я б подумав, що хотів би, щоб програма аварійно працювала, якщо зображення немає в проекті. так навіщо перевіряти?
— Джефф

Оскільки тоді додаток не вийде з ладу і може надійти з відсутнім зображенням
— MacInnis

6

Створіть кнопку та додайте зображення як її швидкий фон 4

     let img = UIImage(named: "imgname")
     let myButton = UIButton(type: UIButtonType.custom)
     myButton.frame = CGRect.init(x: 10, y: 10, width: 100, height: 45)
     myButton.setImage(img, for: .normal)
     myButton.addTarget(self, action: #selector(self.buttonClicked(_:)), for: UIControlEvents.touchUpInside)
     self.view.addSubview(myButton)

Виправлення: рядок 4] button.setImage (зображення, для: .normal)
— MacInnis

4
let btnRight=UIButton.buttonWithType(UIButtonType.Custom) as UIButton
btnRight.frame=CGRectMake(0, 0, 35, 35)
btnRight.setBackgroundImage(UIImage(named: "menu.png"), forState: UIControlState.Normal)
btnRight.setTitle("Right", forState: UIControlState.Normal)
btnRight.tintColor=UIColor.blackColor()

4

Ось як можна створити гарну кнопку з рамкою та закругленими краями:

loginButton = UIButton(frame: CGRectMake(self.view.bounds.origin.x + (self.view.bounds.width * 0.325), self.view.bounds.origin.y + (self.view.bounds.height * 0.8), self.view.bounds.origin.x + (self.view.bounds.width * 0.35), self.view.bounds.origin.y + (self.view.bounds.height * 0.05)))
loginButton.layer.cornerRadius = 18.0
loginButton.layer.borderWidth = 2.0
loginButton.backgroundColor = UIColor.whiteColor()
loginButton.layer.borderColor = UIColor.whiteColor().CGColor
loginButton.setTitle("Login", forState: UIControlState.Normal)
loginButton.setTitleColor(UIColor(red: 24.0/100, green: 116.0/255, blue: 205.0/205, alpha: 1.0), forState: UIControlState.Normal)

3

Щоб встановити фон, ми більше не можемо використовувати forState, тому ми повинні використовувати, forщоб встановити UIControlState:

let zoomInImage = UIImage(named: "Icon - plus") as UIImage?
let zoomInButton = UIButton(frame: CGRect(x: 10), y: 10, width: 45, height: 45))
zoomInButton.setBackgroundImage(zoomInImage, for: UIControlState.normal)
zoomInButton.addTarget(self, action: #selector(self.mapZoomInAction), for: .touchUpInside)
self.view.addSubview(zoomInButton)

Я використовую цей код, щоб розмістити кнопку масштабування на карті Google. використовуйте наведений вище код для встановленого фонового зображення. Це не так, як раніше.
— Шазу

Чим же він відрізняється від інших відповідей?
— Leopold Joy

Щоб встановити фон зараз, ми не можемо використовувати forState, тепер ми повинні використовувати "for", щоб встановити UIControlState
— Shazoo

2

Оновіть до Swift 3

let image = UIImage(named: "name")
let button = UIButton(type: .custom)
button.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
button.setImage(image, for: .normal)
button.addTarget(self, action: #selector(self.btnAbsRetClicked(_:)), for:.touchUpInside)
self.view.addSubview(button)

1

Свіфт: Кнопка інтерфейсу створює програмно

let myButton = UIButton()

myButton.titleLabel!.frame = CGRectMake(15, 54, 300, 500)

myButton.titleLabel!.text = "Button Label"

myButton.titleLabel!.textColor = UIColor.redColor()

myButton.titleLabel!.textAlignment = .Center

myButton.addTarget(self,action:"Action:",forControlEvents:UIControlEvent.TouchUpInside)

self.view.addSubview(myButton)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.