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.
4 Réponses :
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) } }
// 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())
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.
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) } }