gpt4 book ai didi

ios - RatingControl - 从 viewController 中捕获点击的星星数

转载 作者:行者123 更新时间:2023-11-28 10:50:51 27 4
gpt4 key购买 nike

我在我的应用程序中使用 RatingControl 类(在 gitHub 上找到)来记录 4 个标准(实例)的反馈。我必须从 viewController 中分别捕获每个实例中单击的星星数。我怎样才能捕捉到从 viewController 中点击的星星数量,并区分哪个实例被点击了。我相信我必须使用 RatingControl 类中的函数 ratingButtonTapped 但不确定如何实现。

下面的 ViewController 代码片段:

class DetailsViewController: UIViewController {

@IBOutlet weak var ratingControl1: RatingControl!
@IBOutlet weak var ratingControl2: RatingControl!
@IBOutlet weak var ratingControl3: RatingControl!
@IBOutlet weak var ratingControl4: RatingControl!

//I want to use some code within ViewController to capture the #stars clicked

下面的 RatingControl 类:

@IBDesignable class RatingControl: UIStackView {

//MARK: Properties

private var ratingButtons = [UIButton]()

var rating = 0 {
didSet {
updateButtonSelectionStates()
}
}

@IBInspectable var starSize: CGSize = CGSize(width: 44.0, height: 44.0) {
didSet {
setupButtons()
}
}

@IBInspectable var starCount: Int = 5 {
didSet {
setupButtons()
}
}

//MARK: Initialization

override init(frame: CGRect) {
super.init(frame: frame)
setupButtons()
}

required init(coder: NSCoder) {
super.init(coder: coder)
setupButtons()
}

//MARK: Button Action

func ratingButtonTapped(button: UIButton) {
guard let index = ratingButtons.index(of: button) else {
fatalError("The button, \(button), is not in the ratingButtons array: \(ratingButtons)")
}

// Calculate the rating of the selected button
let selectedRating = index + 1

if selectedRating == rating {
// If the selected star represents the current rating, reset the rating to 0.
rating = 0
} else {
// Otherwise set the rating to the selected star
rating = selectedRating
}

print(selectedRating)
}


//MARK: Private Methods

private func setupButtons() {

// Clear any existing buttons
for button in ratingButtons {
removeArrangedSubview(button)
button.removeFromSuperview()
}
ratingButtons.removeAll()

// Load Button Images
let bundle = Bundle(for: type(of: self))
let filledStar = UIImage(named: "filledStar", in: bundle, compatibleWith: self.traitCollection)
let emptyStar = UIImage(named:"emptyStar", in: bundle, compatibleWith: self.traitCollection)
let highlightedStar = UIImage(named:"highlightedStar", in: bundle, compatibleWith: self.traitCollection)

for index in 0..<starCount {
// Create the button
let button = UIButton()

// Set the button images
button.setImage(emptyStar, for: .normal)
button.setImage(filledStar, for: .selected)
button.setImage(highlightedStar, for: .highlighted)
button.setImage(highlightedStar, for: [.highlighted, .selected])

// Add constraints
button.translatesAutoresizingMaskIntoConstraints = false
button.heightAnchor.constraint(equalToConstant: starSize.height).isActive = true
button.widthAnchor.constraint(equalToConstant: starSize.width).isActive = true

// Set the accessibility label
button.accessibilityLabel = "Set \(index + 1) star rating"

// Setup the button action
button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(button:)), for: .touchUpInside)

// Add the button to the stack
addArrangedSubview(button)

// Add the new button to the rating button array
ratingButtons.append(button)
}

updateButtonSelectionStates()
}

private func updateButtonSelectionStates() {
for (index, button) in ratingButtons.enumerated() {
// If the index of a button is less than the rating, that button should be selected.
button.isSelected = index < rating

// Set accessibility hint and value
let hintString: String?
if rating == index + 1 {
hintString = "Tap to reset the rating to zero."
} else {
hintString = nil
}

let valueString: String
switch (rating) {
case 0:
valueString = "No rating set."
case 1:
valueString = "1 star set."
default:
valueString = "\(rating) stars set."
}

button.accessibilityHint = hintString
button.accessibilityValue = valueString
}
}
}

最佳答案

我在我的项目中使用了 HCSStarRatingView 来显示星级获取您可以查看下面的链接。

它通过以下方式为我提供星级值(value)(例如 viwFeedBackStar.value)

https://github.com/hsousa/HCSStarRatingView

我知道根据您的实现,它是不同的库,但它确实有效

在 ios 中获取星级

关于ios - RatingControl - 从 viewController 中捕获点击的星星数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46232753/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com