Swift:按下按钮后更改按钮颜色

10
我正在尝试制作一个基本的iPhone应用程序。我完全不懂Xcode,也在Google上浏览了一下,但没有找到我需要的东西。我想为我的飞机制作一个清单。
我已经在View Controller上放置了几个按钮。我希望当按下按钮时,按钮从灰色变为蓝色,并保持蓝色,直到再次按下。我对Xcode和Swift语言一无所知,如果有人能帮忙,请像对待孩子一样解释清楚。
到目前为止,我已经成功设置了页面并使滚动功能正常工作,但现在只需要更改按钮即可。
谢谢您的帮助, Ty.
4个回答

10

这很简单。

首先,您需要在ViewDidLoad()方法中设置按钮的背景颜色。在此之前,您应该已经为按钮设置了IBOutlet。在我的示例中,我只会将IBOutlet命名为一个通用的“button”。

您的IBOutlet将是:

@IBOutlet weak var button:UIButton!

不要忘记将插座连接到按钮上!

接下来,在ViewDidLoad方法中将按钮的背景图片设置为灰色,如下所示:

override func viewDidLoad() {
    super.viewDidLoad()

    button.backgroundColor = UIColor.grayColor()
}

这样可以使您的按钮拥有通用的灰色背景。如果您想更精确地控制颜色,可以将button.backgroundColor = UIColor.grayColor()替换为button.backgroundColor = UIColor(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat),并将"CGFloat"替换为您选择的值。

接下来是改变按钮颜色的实际代码:

创建一个IBAction并将其与按钮连接起来。我的称为:

@IBAction func buttonTapped(sender: AnyObject) {}

您的要求是,如果按钮处于灰色状态,则在触摸后应变为蓝色;如果它是蓝色,则在触摸后应变为灰色。

因此,在刚才定义的IBAction中,您将添加一个If语句,如下所示:

@IBAction func buttonTapped(sender: AnyObject) {
    if button.backgroundColor == UIColor.grayColor() {
        button.backgroundColor = UIColor.blueColor()
    }
    else if button.backgroundColor == UIColor.blueColor() {
        button.backgroundColor = UIColor.grayColor()
    }
}

如果按钮的背景颜色为灰色,那么这个if语句会将其设置为蓝色,或者如果背景颜色为蓝色,就将其设置为灰色。如果你想要更个性化的颜色,可以将UIColor.BlueColor()UIColor.GrayColor()替换为UIColor(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)
编辑:如果你只想改变按钮的文本颜色,在所需的位置添加以下语句或其变体即可:
button.setTitleColor(UIColor.grayColor(), forState: UIControlState.Selected)

6
使用 UIButton 类的此方法。
func setTitleColor(_ color: UIColor?,
          forState state: UIControlState)

您要查找的状态是“已选择”。
当然,您必须自己处理所选状态,因为切换按钮不是本地行为。

当用户按住按钮时,状态将会变为.highlighted,例如:button.setTitleColor(UIColor.white.withAlphaComponent(0.5), for: .highlighted) - dziobaczy

1

对于Swift 3:

// for change background color of a selected button in a collection view
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let collectionCell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)
    collectionCell.button.addTarget(self, action: #selector(button_Select(_:)), for: .touchUpInside) // add target for action

    return collectionCell
}

@objc func button_Select(_ sender: UIButton) {
    if sender.isSelected == true {
        sender.backgroundColor = UIColor.uicolorFromHex(0x262D35, alpha: 100)
        sender.setTitleColor(UIColor.white, for: .normal)
        sender.isSelected = false
    } else {
        sender.backgroundColor = UIColor.uicolorFromHex(0xF3CD70, alpha: 100)//Choose your colour here
        sender.setTitleColor(UIColor.white, for: .normal) //To change button Title colour .. check your button Tint color is clear_color..
        sender.isSelected = true
    }
}

没有CollectionView:

 //MARK: - UIButton Action
  @IBAction func colorChangingBtn(_ sender: UIButton){
      sender.isSelected = !sender.isSelected
      if sender.isSelected{
        sender.backgroundColor = UIColor.gray
        sender.setTitleColor(UIColor.blue, for: .normal)
         }
      else{
        sender.backgroundColor = UIColor.blue
        sender.setTitleColor(UIColor.white, for: .normal)
       }
   }

0

更新 SWIFT 5

记得在状态选择时也调用颜色。

@IBAction func yourBtnAction(_ sender: UIButton) {

    sender.isSelected = !sender.isSelected
    sender.tintColor = .clear

    if sender.isSelected{
        sender.setTitleColor(.green, for: .selected)
       }
    else{
        sender.setTitleColor(.red, for: .selected)
     }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接