我正面临重用 UITableViewCell 的问题,我收到了让 UIButton 的操作发生在 UITableViewController 中的建议。 问题是因为 UIButton 是在自定义 UIView 子类中实例化的,所以我找不到引用它的方法。
代码是:
class StarButton: UIView {
var buttonRow : Int = 0
var buttonSelected : Bool = false
override init (frame : CGRect)
{
super.init(frame : frame)
initStar()
}
required init?(coder aDecoder: NSCoder){
super.init(coder: aDecoder)
initStar()
}
func initStar(){
let filledStarImage = UIImage(named: "filledStar")
let emptyStarImage = UIImage(named: "emptyStar")
let button = UIButton(frame: CGRect(x: 2, y: 2, width: 33, height: 33))
button.userInteractionEnabled = true
button.addTarget(self, action: #selector(StarButton.fillingStar(_:)), forControlEvents: UIControlEvents.TouchUpInside)
button.setImage(emptyStarImage, forState: .Normal)
button.setImage(filledStarImage, forState: .Selected)
if buttonSelected == true{
button.selected = true
}
addSubview(button)
}
//Could have various errors
func fillingStar(sender: UIButton){
if (sender.selected) == false{
FavoritesManager.favoritesList.setObject(ChemQuizCollection.wordListObject.quizList[buttonRow], forKey: "\(buttonRow)")
sender.selected = !sender.selected
FavoritesManager.favoritesList.synchronize()
} else{
FavoritesManager.favoritesList.removeObjectForKey("\(buttonRow)")
sender.selected = !sender.selected
FavoritesManager.favoritesList.synchronize()
}
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
{
for view in subviews
{
view.touchesBegan(touches, withEvent: event)
}
}
override func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool
{
return true
}
这是自定义的 UIView 子类。我想引用 func initStar() 中的“按钮”。 使用 对于实例化的StarButton.subviews中的 subview { subview.selected = true } 抛出一个错误,指出 UIView 没有成员“已选择”。有没有更好的办法?
提前谢谢大家。
最佳答案
问题出在你的代码上
StarButton.subviews{ subview.selected = true }
.subviews
给 UIView
而不是 UIButton
:UIView
没有 .selected
属性
应该做的是遵循代码或类似的东西。您必须将游览 UIView
转换到 UIButton
let filtured = instantiatedStarButton.subviews.filter({
if let button = $0 as? UIButton{
return button.selected
}
return false
})
关于ios - 如何在 UITableViewController 中引用自定义 UIView 的 subview 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39178317/