Swift: установить UIView в качестве фона UIBarButton / UIButton - PullRequest
1 голос
/ 19 марта 2019

Как мне установить UIView в качестве фона UIBarButton? UIBarButton/UIButton должен содержать заголовок и фоновое изображение.

Я пытался переопределить UIButton класс, но он не работает. Если у кого-то есть решение, пожалуйста, сообщите мне.

Ответы [ 4 ]

0 голосов
/ 19 марта 2019

Возможно, вам следует использовать UIImageView.image вместо самого UIView, чтобы установить нижнее фоновое изображение.

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var myButton: UIButton!
    @IBOutlet weak var myView: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        myButton.setBackgroundImage(myView.image, for: .normal)
    }
}
0 голосов
/ 19 марта 2019
// For UIBarButtonItem (just set customView parameter)

let frame = CGRect(x: 0, y: 0, width: 100, height: 40)
let customView = UIView(frame: frame)
customView.backgroundColor = .red

let barButtonItem = UIBarButtonItem(customView: customView)

// for UIButton

// 1. Subview case (add subview on your target UIButton, send to back so that it does not cover title)

let button0 = UIButton(frame: frame)
button0.addSubview(customView)
button0.sendSubviewToBack(customView)
button0.setTitle("Button", for: UIControl.State())

// 2. Rendered image case (as an alternative render your view to an image and add as a background image)

// Extension for capturing a UIVIew as an image:
extension UIImage {
    convenience init?(view: UIView) {
        UIGraphicsBeginImageContext(view.frame.size)
        guard let ctx = UIGraphicsGetCurrentContext() else {
            return nil
        }
        view.layer.render(in: ctx)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        guard let cgImage = image?.cgImage else {
            return nil
        }
        self.init(cgImage: cgImage)
    }
}

let button1 = UIButton(frame: frame)
let customViewImage = UIImage.init(view: customView)
button1.setBackgroundImage(customViewImage, for: UIControl.State())
button1.setTitle("Button", for: UIControl.State())
0 голосов
/ 19 марта 2019

Вы можете использовать CustomButton, который наследуется от UIControl.Используя xib, вы можете управлять своим пользовательским интерфейсом в соответствии с вашими требованиями.Вы можете добавить n количество элементов пользовательского интерфейса.Вы получите обработчик событий по умолчанию, например UIButton (например, touchupinside, touchupoutside, valuechange).Вы можете предоставить IBActions для того же.Для справки прилагаю несколько скриншотов.Дайте мне знать, если вы столкнетесь с этим во время реализации этого.Продолжайте кодировать.

Add XIB

Add subclass of UIControl and manage IBOut

Manage events

0 голосов
/ 19 марта 2019

Вы можете добавить вид как subView кнопки:

extension UIButton {
    func setBackgroundView(view: UIView) {
        view.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.height)
        view.isUserInteractionEnabled = false
        self.addSubview(view)
    }
}
...