创建一组3个按钮,每个按钮上有不同的图像

时间:2016-11-20 22:32:34

标签: arrays swift button uibutton

我试图创建一组3个按钮,每个按钮上都有不同的图像。我希望它们水平对齐,并且一次只能选择一个(默认情况下,数组中的第一个按钮,当您单击另一个按钮时,它会取消选择之前的选择)。我总共花了n00b而且我试图从我做过的教程中略微偏离,这可以解释为什么将它设置为按钮数组而不是单独创建每个按钮。我的代码给了我一个"期望','分离器"每个" for(index :)行的错误。如何解决这个问题的任何帮助将不胜感激,或者请告诉我是否应该朝着不同的方向去实现这一目标。谢谢! `

import UIKit
class RatingControl: UIView {

    var rating = 0 {
        didSet {
            setNeedsLayout()
        }
        }
    var ratingButtons = [UIButton]()
    let spacing = 48
    let buttonCount = 3

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        let lowUrgencyButtonSelected = UIImage(named: "LowUrgencyButtonSelected")
        let lowUrgencyButton = UIImage(named: "LowUrgencyButton")
        let mediumUrgencyButtonSelected = UIImage(named: "MediumUrgencyButtonSelected")
        let mediumUrgencyButton = UIImage(named: "MediumUrgencyButton")
        let highUrgencyButtonSelected = UIImage(named: "HighUrgencyButtonSelected")
        let highUrgencyButton = UIImage(named: "HighUrgencyButton")

        for (index: 0) in 0..<buttonCount {
            let button = UIButton(frame: CGRect(x: 49.5, y: 12.5, width: 60, height: 31))
            button.setImage(lowUrgencyButton, forState: .Normal)
            button.setImage(lowUrgencyButtonSelected, forState: .Selected)
            button.setImage(lowUrgencyButtonSelected, forState: [.Highlighted, .Selected])

            button.adjustsImageWhenHighlighted = false

            button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(_:)), forControlEvents: .TouchDown)
            ratingButtons += [button]
            addSubview(button)
        }
        for (index: 1) in 0..<buttonCount {
            let button = UIButton(frame: CGRect(x: 49.5, y: 12.5, width: 60, height: 31))
            button.setImage(mediumUrgencyButton, forState: .Normal)
            button.setImage(mediumUrgencyButtonSelected, forState: .Selected)
            button.setImage(mediumUrgencyButtonSelected, forState: [.Highlighted, .Selected])

            button.adjustsImageWhenHighlighted = false

            button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(_:)), forControlEvents: .TouchDown)
            ratingButtons += [button]
            addSubview(button)
        }
        for (index: 2) in 0..<buttonCount {
            let button = UIButton(frame: CGRect(x: 49.5, y: 12.5, width: 60, height: 31))
            button.setImage(highUrgencyButton, forState: .Normal)
            button.setImage(highUrgencyButtonSelected, forState: .Selected)
            button.setImage(highUrgencyButtonSelected, forState: [.Highlighted, .Selected])

            button.adjustsImageWhenHighlighted = false

            button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(_:)), forControlEvents: .TouchDown)
            ratingButtons += [button]
            addSubview(button)
        }
    }
    override func layoutSubviews() {
        var buttonFrame = CGRect(x: 49.5, y: 12.5, width: 60, height: 31)

        for (index, button) in ratingButtons.enumerate() {
            buttonFrame.origin.x = CGFloat(index * (60 + spacing))
            button.frame = buttonFrame
        }
        updateButtonSelectionStates()
    }

    override func intrinsicContentSize() -> CGSize {
        return CGSize(width: 60, height: 31)
    }

    func ratingButtonTapped(button: UIButton) {
        rating = ratingButtons.indexOf(button)! + 1

        updateButtonSelectionStates()
    }

    func updateButtonSelectionStates() {
        for (index, button) in ratingButtons.enumerate() {
            button.selected = index < rating
        }
    }
}

`

0 个答案:

没有答案