前提・実現したいこと
写真付きの5択のクイズアプリを作成しています。
写真を表示して、その写真に対しての質問があり、答えを5択から選択するというイメージです。
発生している問題・エラーメッセージ画像の追加まではできましたが、画像の追加のコードを入力してからエラーがでました。
前回の投稿から違うやり方でしてみました。
UIImageViewを接続し、if文を使って画像の切り替えをしてるのがあったのでやってみました。
画像のコードを入力しましたが、エラーの意味もわからず何が間違っているのか分かりません。
エラーメッセージ
QuizViewControllerの値にはメンバーがありません。
該当のソースコード
swift
import UIKit
class QuizViewController: UIViewController {
@IBOutlet weak var quizNumberLabel: UILabel!
@IBOutlet weak var quizTextView: UILabel!
@IBOutlet weak var answerBtn1: UIButton!
@IBOutlet weak var answerBtn2: UIButton!
@IBOutlet weak var answerBtn3: UIButton!
@IBOutlet weak var answerBtn4: UIButton!
@IBOutlet weak var answerBtn5: UIButton!
@IBOutlet weak var judgeImageView: UIImageView!
〜〜〜変更部分〜〜〜
** @IBOutlet weak var appleImageView: UIImageView!
func changeImage(someValue: Int) { if someValue == 0 { self.imageView.image = UIImage(named:"first_image") } else if someValue == 1 { self.imageView.image = UIImage(named:"second_image") } else if someValue == 2 { self.imageView.image = UIImage(named:"third_image") } else if someValue == 3 { self.imageView.image = UIImage(named:"fourth_image") } else if someValue == 4 { self.imageView.image = UIImage(named:"some_image") } } **
〜〜〜ここまで〜〜〜
//csvファイルを読み込む・問題文と選択肢を表示する var csvArray: [String] = [] var quizArray: [String] = [] var quizCount = 0 //問題数を入れる変数 var quizTotal = 5 var correctCount = 0 var explanetionBGView = UIView() var explanationBGX = 0.0 //正解数を入れる変数 var correctLabel = UILabel() //戻るボタン var backBtn = UIButton() //画面が表示される時に呼ばれる場所 override func viewDidLoad() { super.viewDidLoad() let screenSize:CGSize = UIScreen.main.bounds.size explanationBGX = Double(screenSize.width/2) - 320/2 explanetionBGView.backgroundColor = UIColor.lightGray explanetionBGView.frame = CGRect(x: explanationBGX,y:Double(screenSize.height),width: 320, height: 210) explanetionBGView.isUserInteractionEnabled = true self.view.addSubview(explanetionBGView) correctLabel.frame = CGRect(x: 60, y: 100, width: 300, height: 30) correctLabel.font = UIFont.systemFont(ofSize: 20) explanetionBGView.addSubview(correctLabel) //戻るボタン実装 backBtn.frame = CGRect(x: 90, y: 200, width: 132, height: 37) backBtn.backgroundColor = UIColor.white backBtn.tintColor = UIColor.white backBtn.setTitle("戻る", for: .normal) backBtn.setTitleColor(UIColor.black, for: .normal) backBtn.addTarget(self, action: #selector(QuizViewController.backBtnTapped), for: UIControl.Event.touchUpInside) explanetionBGView.addSubview(backBtn) csvArray = loadCSV(fileName: "quiz") print(csvArray) //問題のデータの一番最初の行をとってくる処理 quizArray = csvArray[quizCount].components(separatedBy: ",") //問題数を表示 quizNumberLabel.text = "第(quizCount + 1)問" //問題文を表示する quizTextView.text = quizArray[0] //選択肢を表示する answerBtn1.setTitle(quizArray[2], for: .normal) answerBtn2.setTitle(quizArray[3], for: .normal) answerBtn3.setTitle(quizArray[4], for: .normal) answerBtn4.setTitle(quizArray[5], for: .normal) // Do any additional setup after loading the view. } override func prepare(for segue: UIStoryboardSegue, sender: Any?){ let sVC = segue.destination as! ScoreViewController sVC.correct = correctCount } //ボタンをタップした時の判定 @IBAction func btnAction(sender: UIButton) { if sender.tag == Int(quizArray[1]) { correctCount += 1 judgeImageView.image = UIImage(named: "correct") } else { judgeImageView.image = UIImage(named: "incorrect") } judgeImageView.isHidden = false explanation() } //戻るボタン @objc func backBtnTapped(){ let screenHeight = Double(UIScreen.main.bounds.size.height) UIView.animate(withDuration: 0.5, animations: {() -> Void in self.explanetionBGView.frame = CGRect(x: self.explanationBGX, y: screenHeight, width: 320, height: 210) }) answerBtn1.isEnabled = true answerBtn2.isEnabled = true answerBtn3.isEnabled = true answerBtn4.isEnabled = true answerBtn5.isEnabled = true judgeImageView.isHidden = true nextQuiz() } func explanation(){ let correctNumber = Int(quizArray[1])! correctLabel.text = "答え:(quizArray[correctNumber + 2])" let answerBtnY = answerBtn1.frame.origin.y UIView.animate(withDuration: 0.5, animations: {() -> Void in self.explanetionBGView.frame = CGRect(x: self.explanationBGX, y: Double(answerBtnY), width: 320, height: 280) }) answerBtn1.isEnabled = false answerBtn2.isEnabled = false answerBtn3.isEnabled = false answerBtn4.isEnabled = false answerBtn5.isEnabled = false } //次の問題を表示 func nextQuiz() { quizCount += 1 //画面遷移 quizArray.removeAll() if quizCount < quizTotal { quizArray = csvArray[quizCount].components(separatedBy: ",") quizNumberLabel.text = "第(quizCount + 1)門" quizTextView.text = quizArray[0] answerBtn1.setTitle(quizArray[2], for: .normal) answerBtn2.setTitle(quizArray[3], for: .normal) answerBtn3.setTitle(quizArray[4], for: .normal) answerBtn4.setTitle(quizArray[5], for: .normal) answerBtn5.setTitle(quizArray[6], for: .normal) } else { performSegue(withIdentifier: "scoreVC", sender: nil) } } func loadCSV(fileName: String) -> [String] { let csvBundle = Bundle.main.path(forResource: fileName, ofType: "csv")! do { let csvDate = try String(contentsOfFile: csvBundle,encoding: String.Encoding.utf8) let lineChange = csvDate.replacingOccurrences(of: "\r", with: "\n") csvArray = lineChange.components(separatedBy: "\n") } catch { print("エラー") } return csvArray } /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. } */
}
試したこと
ご教授頂いたことをしているのか、わかりませんがネットで似ているのを探していれこみました。すみませんが、教えて下さい。お願いします。
補足情報(FW/ツールのバージョンなど)
バージョンなどは最新です。
初めてのアプリ作成なので、色々おしえていただくと助かります。
参考サイトを少しいじって、オリジナルアプリにしています。
ご教授お願いします。
あなたの回答
tips
プレビュー