【问题标题】:How to change button image in swift?如何快速更改按钮图像?
【发布时间】:2016-06-26 18:20:49
【问题描述】:

我正在开发一个有按钮的应用程序。该按钮没有文本、图像或背景。

所以我想做的是在 viewDidLoad 函数中给它一个图像。

这就是我所拥有的:

@IBOutlet var tapButton: UIButton!

override func viewDidLoad() {

    super.viewDidLoad()

    tapButton.setImage("redTap.png", forState: UIControlState.Normal)
}

但我有一个错误说我无法将字符串转换为 UIIMage。

如何让它工作?

我试过了:

let image = UIImage(named: "redTap.png")

tapButton.setImage(image, forState: UIControlState.Normal)

我已经让它工作了,但现在我遇到了一个问题。

图像应该是红色文本,但它显示为蓝色。

我能够使用以下方法正确显示图像:

let image = UIImage(named: imageColor[randNum])?.imageWithRenderingMode(.AlwaysOriginal)
tapButton.setImage(image, forState: UIControlState.Normal)

我现在想要的是在按下按钮时不突出显示按钮。我还有一些其他按钮在 xcode 中而不是通过代码分配了图像。按下时它们不会突出显示。

那么当按钮被按下时,我怎样才能摆脱突出显示呢?

【问题讨论】:

    标签: xcode swift uibutton uiimage


    【解决方案1】:

    您不需要“.png”。

    如果“.imageWithRenderingMode(.AlwaysOriginal)”对您有用:要将相同的图像保持在不同的状态,您必须为不同的状态设置相同的图像/属性。

    @IBOutlet var tapButton: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        tapButton.setImage(UIImage(named: "redTap")?.imageWithRenderingMode(.AlwaysOriginal), forState: .Normal)
        tapButton.setImage(UIImage(named: "redTap")?.imageWithRenderingMode(.AlwaysOriginal), forState: .Highlighted)
    }
    

    【讨论】:

    • 它现在可以工作了,但不是显示红色按钮,这就是图像的样子,而是显示一个蓝色按钮。如何让它显示原始图像?
    • 更新了代码以显示如何在不同的状态下保持相同。
    • 你不需要设置两个状态。如果未设置任何其他内容,则所有状态都使用与“正常”状态相同的图像。
    【解决方案2】:

    斯威夫特 3

    yourBtn.setImage( UIImage.init(named: "imagename"), for: .normal)
    

    【讨论】:

      【解决方案3】:

      现在(swift 3 版):

      @IBOutlet var tapButton: UIButton!
      
      override func viewDidLoad() {
          super.viewDidLoad()
      
          tapButton.setImage(UIImage(named: "redTap")?.withRenderingMode(.alwaysOriginal), for: .normal)
          tapButton.setImage(UIImage(named: "redTap")?.withRenderingMode(.alwaysOriginal), for: .normal)
      }
      

      【讨论】:

        【解决方案4】:

        首先,我会将您想要的图像放入 Assets.xcassets 文件夹中。只需将其拖入即可。然后您可以通过双击它来调用它。假设它被称为“redTap”。

        对于您要输入的代码:

        @IBOutlet var tapButton: UIButton!
        
        override func viewDidLoad() {
        
            super.viewDidLoad()
        
            let redTapImage = UIImage(named: "redTap")
            tapButton.setImage(redTapImage, forState: UIControlState.Normal)
        }
        

        【讨论】:

          【解决方案5】:

          有一个简单的解决方案:

          @IBOutlet var tapButton: UIButton!{
          didSet{
          let image = UIImage(named: imageColor[randNum])
          tapButton.setImage(image, forState: UIControlState.Normal)
          }
          

          此外,在属性检查器中,将按钮类型设置为“自定义”

          【讨论】:

          • 是为了防止按钮按下时高亮吗?
          • 我已经尝试使用您提供的代码,但现在图像甚至不显示。
          • 您是否将按钮类型设置为自定义?
          • @user2303213 在我的 Mac 上运行良好 Xcode 的版本是 7.3.1 swift 是 2.2
          • 不要忘记从您的按钮添加 IBOutlet。
          【解决方案6】:

          首先在界面生成器中将您的按钮类型设置为Custom,并为您的按钮设置正常状态的图像。

          将类文件中按钮的 IBOutlet 连接为

          @IBOutlet weak var btnCheckbox: UIButton!
          

          viewDidLoad 的类文件中将所选状态的图像设置为

          btnCheckbox.setImage(UIImage.init(named: "name_of_image"), for: .selected)
          

          在类文件中创建@IBAction

          @IBAction func onTapCheckBox(_ sender: UIButton) {
              sender.isSelected = !sender.isSelected
          }
          

          然后将@IBAction 连接到来自界面构建器的按钮的Touch up Inside 事件

          【讨论】:

            【解决方案7】:

            让 image = UIImage(named : "redTap.png") tapButton.setImage(image, .Normal)

            【讨论】:

            • 你的图片在 XCode image.assets 文件夹中吗?
            【解决方案8】:
            let button = UIButton(type: .Custom)
            let image = UIImage(named:"redTap")?.imageWithRenderingMode(.AlwaysTemplate)
            button.setImage(image, forState: .Normal)
            button.tintColor = UIColor.redColor()
            

            【讨论】:

              【解决方案9】:

              更新最新的 swift 版本, 它是这样工作的

              button.setImage(UIImage(named: "propopup")?.withRenderingMode(.alwaysOriginal), for: [])
              

              【讨论】:

                猜你喜欢
                • 2016-02-27
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-02-19
                • 1970-01-01
                • 1970-01-01
                • 2020-03-16
                相关资源
                最近更新 更多