UITableViewCellの問題が再利用されており、UITableViewController内でUIButtonの動作を行うよう提案しています。 問題は、UIButtonがカスタムUIViewサブクラス内でインスタンス化されるため、参照する方法が見つからないことです。UITableViewControllerのカスタム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()の "button"を参照したいと思います。 インスタンス化されたStarButton.subviewsのサブビュー{ subview.selected = true } は、UIViewにメンバーが「選択済み」でないというエラーをスローします。より良い方法がありますか?
ありがとうございます。
ありがとうございました。それは本当に助け:)。 $ 0はどういう意味ですか? – Daniel
配列内のすべての要素は、$ 0の意味です。 の場合はドキュメントを確認してください。https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/OptionalChaining.html – renjithr
質問に素早く返信いただきありがとうございます:)私はちょうどその意味を理解するために$ 0を見て、あなたがすでに応答したことを認識しました!どうもありがとう。 – Daniel