ボタンがタップされたときにデータを渡す最善の方法を考え出すのに問題があります。私はまた、それがタップされたときにボタンをアニメーション化したい。このボタンは、マップアノテーションのカスタムコールアウトビューの内側にあります。私は、クラスのプロパティdogIDOfUpvoteTapped
を設定し、それを使用して、呼び出された関数がアクセスできるようにデータを格納しようとしました。残念ながら、ボタン自体とやりとりしたいときは、状況が複雑になります。#selector関数でデータを渡す
呼び出された関数 'upvoteButtonTapped'から 'CustomAnnotation'オブジェクトへの参照を取得するにはどうすればよいですか?私は無関係なコードの束を省略しますが、ここで私が働いているものです:
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
if view.annotation is MKUserLocation {
return
}
let customAnnotation = view.annotation as! CustomAnnotation
let views = Bundle.main.loadNibNamed("CustomCalloutView", owner: nil, options: nil)
let calloutView = views?[0] as! CustomCalloutView
dogIDOfUpvoteTapped = customAnnotation.dogID
calloutView.scoreLabel.text = text
calloutView.creatorLabel.text = customAnnotation.creator
calloutView.dogImageView.image = customAnnotation.picture
calloutView.upvoteButton.addTarget(self, action: #selector(upvoteTapped), for: .touchUpInside)
view.addSubview(calloutView)
}
私がやっているものは何も質問には本当に関連していないのにここで、upvoteTappedするための機能です。
@objc func upvoteTapped() {
let ref = Database.database().reference().child("dogs").child(dogIDOfUpvoteTapped)
ref.child("upvotes").observeSingleEvent(of: .value, with: { (snap) in
var currentUpvotes = Int(snap.value as! String)!
currentUpvotes += 1
ref.child("upvotes").setValue(String(currentUpvotes))
})
}
ボタンにパラメータを追加することはできませんが、ビューコントローラにプロパティを追加し、希望する値を追加してIBActionからアクセスしてください。 –
@LeoDabus上記を参照すると、現在これを行っています。アクションからそのボタンを参照していないときに、どのようにボタンのアニメーションを作成するのですか? –
申し訳ありませんが、上のコードではView Controllerインスタンスのプロパティは表示されません。 –