現状
ゲームのスコア画面でスコアによって画面を切り替えたいと考え、LoadViewで以下のように出し分けを行なっています。
Swift
1override func loadView() { 2 if score == 10 { 3 self.view = ResultGoodView() 4 } else if score > 5 { 5 self.view = ResultNormalView() 6 } else { 7 self.view = ResultBadView() 8 } 9 }
CustomViewの作成方法はカスタムビューを利用してビューを再利用の記事を参考に作成しました。
###こまっていること
Result画面からそれぞれのカスタムビューに対してscoreの値をLabelに入れたいと考えているのですが、どのように実装して良いのかわからず困っています。
試した事
viewControllerから参照する
以下のようにViewController側でlabelを参照しようとするとUIViewはLabelを保持していない為エラーになってしまいます。
Swift
1 override func loadView() { 2 if score == 10 { 3 self.view = ResultGoodView() 4 self.view.label.text = "(score)点" 5 } else if score > 5 { 6 self.view = ResultNormalView() 7 self.view.label.text = "(score)点" 8 } else { 9 self.view = ResultBadView() 10 self.view.label.text = "(score)点" 11 } 12 }
error
1Value of type 'UIView?' has no member 'label'
initializerで値を入れる
customViewにイニシャライザを作ってscoreを内部に持たせてlabelのtextに反映させようとしてみました。
Swift
1//呼び出し元 2 self.view = ResultBadView(frame: self.view.frame, score: score)
Swift
1//customView 2 var score: Int? 3 init(frame: CGRect, score: Int){ 4 self.score = score 5 super.init(frame: frame) 6 loadFromNib() 7 } 8 private func loadFromNib() { 9 let v = UINib(nibName: "ResultBadView", bundle: Bundle(for: ResultGoodView.self)).instantiate(withOwner: self, options: nil)[0] as! UIView 10 v.frame = self.bounds 11 label.text = "(score!)/10\" 12 addSubview(v) 13 }
この状態で実行をすると以下のエラーが出てしまいアプリがクラッシュしてしまいます。
error
1Thread 1: EXC_BAD_ACCESS (code=2, address=0x16b307fa0)
エラーでしらべてみたところCustomClassが間違っていることが問題?のように書かれていてもしかしたらinitializerを増やすこと自体無理なのかもと思っています。
どのように実装するれば値を渡すことができるでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/21 10:35