Swift中的UIButton有两个图像

时间:2015-08-08 21:41:15

标签: swift uibutton customization

我正在尝试制作一个UIButton,它在按钮标题的两侧(左侧和右侧)都有一个UIImage。理想情况下,图像将固定在按钮的左侧和右侧,标题将居中,但我可以将图像放在我想的标题标签旁边。我已经能够添加一个图像,它出现在标题之前,但是我如何添加第二个?

4 个答案:

答案 0 :(得分:8)

我知道这是一个老问题,但由于没有提供任何代码而且有人要求它,我想我会分享我的解决方案。

我所做的是创建一个新类,它是UIButton的子类。我确保您可以在界面构建器中立即看到您所做的所有更改。所以你可以直接拖入UIButton。指定您自己的类的类,它将允许您设置图像并立即看到它被绘制

以下是我为实现这一目标所做的工作

import UIKit

@IBDesignable
class AddProfilePictureView: UIButton {

    @IBInspectable var leftHandImage: UIImage? {
        didSet {
            leftHandImage = leftHandImage?.withRenderingMode(.alwaysOriginal)
            setupImages()
        }
    }
    @IBInspectable var rightHandImage: UIImage? {
        didSet {
            rightHandImage = rightHandImage?.withRenderingMode(.alwaysTemplate)
            setupImages()
        }
    }

    func setupImages() {
        if let leftImage = leftHandImage {
            self.setImage(leftImage, for: .normal)
            self.imageView?.contentMode = .scaleAspectFill
            self.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: self.frame.width - (self.imageView?.frame.width)!)
        }

        if let rightImage = rightHandImage {
            let rightImageView = UIImageView(image: rightImage)
            rightImageView.tintColor = COLOR_BLUE

            let height = self.frame.height * 0.2
            let width = height
            let xPos = self.frame.width - width
            let yPos = (self.frame.height - height) / 2

            rightImageView.frame = CGRect(x: xPos, y: yPos, width: width, height: height)
            self.addSubview(rightImageView)
        }
    }
}

答案 1 :(得分:0)

我会将它分解为集合视图中的两个按钮 - 它非常灵活,可以很好地用于这样的事情。

答案 2 :(得分:0)

UIImageView将带有图片的addSubview添加到按钮,setImage添加另一个按钮,可以使用titleEdgeInsetsimageEdgeInsets进行调整

如果您需要代码示例 - 请告诉我。

希望它有所帮助!

答案 3 :(得分:0)

Swift 5,XCode 11.6

请在扩展程序或自定义UIButton类中使用以下代码。我在自定义类中使用了以下代码。该功能将分别设置左或右图像并对齐文本。

CSV

用法:

  1. vegaButton.setImage(right:myImage)//用于正确的图像
  2. vegaButton.setImage(left:myImage)//用于左图像
  3. vegaButton.setImage(right:myImage,left:myImage)//用于两个图像。