1
votes

Swift: définir UIView comme arrière-plan de UIBarButton / UIButton

Comment puis-je définir un UIView comme arrière-plan d'un UIBarButton ? UIBarButton / UIButton doit contenir son titre et son image d'arrière-plan.

J'ai essayé de remplacer la classe UIButton , mais cela ne fonctionne pas. Si quelqu'un a une solution, veuillez m'en informer.


0 commentaires

4 Réponses :


1
votes

Vous pouvez ajouter une vue en tant que sous-vue du bouton:

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)
    }
}


0 commentaires

1
votes
// 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 commentaires

0
votes

Vous pouvez utiliser CustomButton qui hérite de UIControl. En utilisant xib, vous pouvez gérer votre interface utilisateur selon vos besoins. Vous pouvez y ajouter n nombre d'éléments d'interface utilisateur. Vous obtiendrez un gestionnaire d'événements par défaut avec ceci comme UIButton (comme touchupinside, touchupoutside, valuechange). Vous pouvez fournir des IBActions pour le même. Pour référence, joignant quelques captures d'écran. Faites-moi savoir si vous en faites face lors de la mise en œuvre de cela. Continuez à coder.

 Ajouter XIB

 Ajouter une sous-classe de UIControl et gérer IBOut

 Gérer les événements


0 commentaires

0
votes

Vous devriez peut-être utiliser UIImageView.image au lieu de l'UIView lui-même pour définir l'image d'arrière-plan du bas.

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 commentaires