我试图创建一组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
}
}
}
`