ios - 单击另一个按钮更改按钮背景

标签 ios swift3 xcode8

我使用此代码,以便当我单击按钮时,其背景更改为带有白色边框的图片,当我再次按下它时,它会更改为带有灰色背景的图片(该按钮始终具有灰色背景)。

如何才能使当我单击另一个按钮(清晰且相等)时,“+”、“-”、“/”、“*”的背景变为按下前的灰色。

Button

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var displayResultLabel: UILabel!
    var stillTyping = false
    var dotIsPlaced = false
    var firstOperand: Double = 0
    var secondOperand: Double = 0
    var operationSign: String = ""


    var currentInput: Double {
        get {
            return Double (displayResultLabel.text!)!
        }
        set {
            let value = "\(newValue)"
            let ValueArray = (value.components(separatedBy:"."))
            if ValueArray[1] == "0" {
                displayResultLabel.text = "\(ValueArray[0])"
            } else {
                displayResultLabel.text = "\(newValue)"
            }
            stillTyping = false
        }
    }

    @IBAction func numberPressed(_ sender: UIButton) {
        let number = sender.currentTitle!

        if stillTyping {
            if (displayResultLabel.text?.characters.count)! < 20 {
                displayResultLabel.text = displayResultLabel.text! + number
            }
        } else {
            displayResultLabel.text = number
            stillTyping = true
        }
    }

    @IBAction func twoOperandsSignPressed(sender: UIButton) {
        operationSign = sender.currentTitle!
        firstOperand = currentInput
        stillTyping = false
        dotIsPlaced = false
    }

    func operateWithTwoOperands(operation: (Double, Double) -> Double) {
        currentInput = operation(firstOperand, secondOperand)
        stillTyping = false
    }

    @IBAction func equalitySignPressed(sender: UIButton) {

        if stillTyping {
            secondOperand = currentInput
        }

        dotIsPlaced = false

        switch operationSign {

        case "+":
            operateWithTwoOperands{$0 + $1}

        case "-":
            operateWithTwoOperands{$0 - $1}

        case "✕":
            operateWithTwoOperands{$0 * $1}

        case "÷":
            operateWithTwoOperands{$0 / $1}
        default: break

        }
    }

    @IBAction func clearButtonPressed(_ sender: UIButton) {
        firstOperand = 0
        secondOperand = 0
        currentInput = 0
        displayResultLabel.text = "0"
        dotIsPlaced = false
        operationSign = ""

    }

    // +,-
    @IBAction func plusMinusButtonPressed(_ sender: UIButton) {
        currentInput = -currentInput
    }

    @IBAction func percentageButtonPressed(_ sender: UIButton) {
        if firstOperand == 0 {
            currentInput = currentInput / 100
        } else {
            secondOperand = firstOperand * currentInput / 100
        }
    }

    @IBAction func squareRootButtonPressed(_ sender: UIButton) {
        currentInput = sqrt(currentInput)
    }

    @IBAction func dotButtonPressed(_ sender: UIButton) {
        if stillTyping && !dotIsPlaced {
            displayResultLabel.text = displayResultLabel.text! + "."
            dotIsPlaced = true
        } else if !stillTyping && !dotIsPlaced {
            displayResultLabel.text = "0."
        }

    @IBAction func PercentAnimate(_ sender: UIButton) {

    if sender.currentBackgroundImage == image_off {    
        sender.setBackgroundImage(Image_on, for: .normal)         
    } else {
        sender.setBackgroundImage(image_off, for: .normal)
    } 
    if (previousButton !== sender) {
        previousButton.setBackgroundImage(image_off, for: .normal)
        previousButton = sender
    }
}
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }

}

最佳答案

这是您可以为任何 View 创建边框的代码,在您的情况下它将是按钮。

func createBordersWithColor(color: UIColor, myView : UIView) {

    myView.layer.borderWidth = 1
    myView.layer.cornerRadius = 0
    myView.layer.shouldRasterize = false
    myView.layer.rasterizationScale = 2
    myView.clipsToBounds = true
    myView.layer.masksToBounds = true
    let cgColor: CGColor = color.cgColor
    myView.layer.borderColor = cgColor
}

您可以将上述函数与您的代码一起使用,例如

@IBAction func PercentAnimate(_ sender: UIButton) {
    let btnCurrent : UIButton = sender as! UIButton
    let btnPrevious : UIButton = previousButton as! UIButton
    createBorderWithColor(color : UIColor.clear , myView : btnPrevious)
    createBorderWithColor(color : UIColor.clear , myView : btnCurrent)
    if (previousButton !== sender) {
        previousButton = sender
    }
}

请告诉我它是否有帮助,或者您需要任何解释。

如果你想用图片设置

@IBAction func PercentAnimate(_ sender: UIButton) {
let btnCurrent : UIButton = sender as! UIButton
let btnPrevious : UIButton = previousButton as! UIButton
btnPrevious.setBackgroundImage(image_off, for: .normal)
btnCurrent.setBackgroundImage(image_on, for: .normal)
if (previousButton !== sender) {

    previousButton = sender
}
}

关于ios - 单击另一个按钮更改按钮背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45519769/

相关文章:

android - 如何使用手机传感器(不包括 GPS)绘制(地形) map ?

swift - 理解 Swift 3 语法

ios - 更改 Collection View 单元格大小

swift - 打开模块 'XCTest' : Not a directory 的导入文件

ios - 我如何在 alamofire post 请求中发送 JSON 变量作为参数

xcode8 - Xcode 源代码编辑器扩展文档

ios - iPad 2 UIImageview 显示图像不正确(渲染不正确)

ios - App Store 崩溃未在 Crashlytics 中报告

ios - 从 MainController 向 Delegate 发送消息 - Swift

swift - 如何正确地在 Swift 中声明一个变量?