Swift:按下后更改按钮颜色

时间:2015-07-12 21:15:28

标签: ios iphone swift button

我正在尝试将我的iPhone制作一个基本应用程序。我是Xcode的新手,我在google上浏览过,无法找到我正在寻找的内容。我正试图为我的飞机制作一份清单。

我基本上有一个带有几个按钮的View控制器。我想要的是按钮在按下后从灰色变为蓝色并保持蓝色,除非再次按下。我根本不了解Xcode和Swift语言,所以如果有人可以提供帮助,请解释好像你正在向孩子解释。

到目前为止,我已经设法让页面全部设置和滚动工作,但我现在只需要按钮进行更改。

提前谢谢你, TY。

4 个答案:

答案 0 :(得分:6)

这很简单。

您首先要在ViewDidLoad()方法中实际设置按钮的背景颜色。在此之前,您应该已经为按钮设置了IBOutlet。在我的例子中,我只是将插座命名为通用"按钮"。

您的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)

答案 1 :(得分:4)

使用UIButton类的这种方法

func setTitleColor(_ color: UIColor?,
          forState state: UIControlState)

您正在寻找的州是.Selected

当然,您必须自己处理选定状态,因为切换按钮不是本机行为。

答案 2 :(得分: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) {
    let button = sender

    if button.isSelected == true {
        button.backgroundColor = UIColor.uicolorFromHex(0x262D35, alpha: 100)
        button.setTitleColor(UIColor.white, for: .normal)
        button.isSelected = false
    } else {
        button.backgroundColor = UIColor.uicolorFromHex(0xF3CD70, alpha: 100)//Choose your colour here
        button.setTitleColor(UIColor.white, for: .normal) //To change button Title colour .. check your button Tint color is clear_color..
        button.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)
       }
   }

答案 3 :(得分: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)
     }
}