問題の概要
TableViewの中のstatic cellsにボタンを押すごとに4枚のimageが変わる機能を設けました。最初のひとつのセルでのボタンをIBActionに結びつけた場合は書いたコードどおり機能しています。
しかし、このケースの場合static cellsにしましたので6つのセルの数だけIBActionをストーリーボード上のボタンと接続する必要があります。TableViewの中のセルをstatic cellsにした理由はセルの内容などをデーターベースとして処理する都合などあり、動的セルであると不具合があるためです。
そこでストーリーボード上のタブを使いひとつのIBActionと6個のボタンを接続しタブを0から5まで設定しましたが、switch文の中のコードに「Use of unresolved identifier 'image'」などのエラーがでて前に進みません。
対応方法を教えて頂ければ幸いです。
参考にしたURL
ストーリーボード上のTableViewスクリーンショット(この交通手段とあるイメージを4枚切り替えるのが問題です)
ひとつのボタンーIBActionで成功したコード
//複数乗り物画像をボタンで変換するコード(ひとつのセルだけ)ここから・・・・・ @IBAction func onNext(sender: AnyObject) { // 表示している画像の番号を1増やす dispImageNo += 1 // 表示している画像の番号を元に画像を表示する displayImage() } /// 表示している画像の番号 var dispImageNo = 0 /// 表示している画像の番号を元に画像を表示する func displayImage() { // 画像の名前の配列 let imageNameArray = [ "KoutsuShudanNone", "BusImg", "TrainImg", "KoutsuShudanOther" ] // 画像の番号が正常な範囲を指しているかチェック // 範囲より下を指している場合、最後の画像を表示 if dispImageNo < 0 { dispImageNo = 3 } // 範囲より上を指している場合、最初の画像を表示 if dispImageNo > 3 { dispImageNo = 0 } // 表示している画像の番号から名前を取り出し let name = imageNameArray[dispImageNo] // 画像を読み込み let image = UIImage(named: name) // Image Viewに読み込んだ画像をセット imageTransImage01DepCell01.image = image }
##ひとつのボタンでのImageを出したスクリーンショット(左の交通手段という画像4枚が変わります。ここでは2枚のみ添付しました。)
注:このスクリーンショットでのカギのボタンが2段目からSegmented controlになっているが直近のストーリーボードではカギイメージとボタンになっています。
複数のボタンにしてエラーがでたコード(黄色1個と赤色4個)
// Save01TableViewController.swift //途中 略 class Save01TableViewController: UITableViewController { //途中 略 @IBOutlet weak var buttonTransImage01DepCell01: UIButton! @IBOutlet weak var imageTransImage01DepCell01: UIImageView! //途中 略 //複数乗り物画像をボタンで変換するコードここから・・・・・ enum actionTag: Int { case onNext1 = 0 case onNext2 = 1 case onNext3 = 2 case onNext4 = 3 case onNext5 = 4 case onNext6 = 5 } /// 表示している画像の番号 var dispImageNo = 0 /// 表示している画像の番号を元に画像を表示する func displayImage() { // 表示している画像の番号を元に画像を表示する //displayImage() // 画像の番号が正常な範囲を指しているかチェック // 範囲より下を指している場合、最後の画像を表示 if dispImageNo < 0 { dispImageNo = 3 } // 範囲より上を指している場合、最初の画像を表示 if dispImageNo > 3 { dispImageNo = 0 } // 画像の名前の配列 let imageNameArray = [ "KoutsuShudanNone", "BusImg", "TrainImg", "KoutsuShudanOther" ] // 表示している画像の番号から名前を取り出し let name = imageNameArray[dispImageNo] // 画像を読み込み let image = UIImage(named: name) //黄色エラー } @IBAction func onNext(_ sender: Any) { // 表示している画像の番号を1増やす dispImageNo += 1 // 表示している画像の番号を元に画像を表示する displayImage() guard let onNext = sender as? UIButton else { return } switch onNext.tag { // Image Viewに読み込んだ画像をセット case onNext1: imageTransImage01DepCell01.image = image //赤色エラー case onNext2: imageTransImage01DepCell02.image = image//赤色エラ case onNext3: imageTransImage01DepCell03.image = image//赤色エラ case onNext4: imageTransImage01DepCell04.image = image//赤色エラ case onNext5: imageTransImage01DepCell05.image = image//赤色エラ case onNext6: imageTransImage01DepCell06.image = image//赤色エラ default: print("") return } } //複数乗り物画像をボタンで変換するコード(ひとつのセルだけ) ここまで
ひとつのIBActionと6つのボタンを結んだスクリーンショット(左の黒い部分に結ばれた4個のボタンが表示されています。この画面では4個しか現れていません。)
エラー文スクリーンショット2枚 いずれもFIX指示がある
FIXを実施したあとのエラーは添付のスクリーンショットのとおりです。
ご参考事項
環境は下記のとおりです。
MacBook Pro (15-inch, 2016)
High Sierra OS10.13.6
Version 9.4 (9F1027a)Swift4
交通手段とあるイメージを4枚切り替えるこの問題が解決したら右側のカギマークと保存の機能もひとつのIBActionに結びたいと思っています。
最初に表示する「交通手段」のイメージは当初下記のコードで表示しましたが現在はコメントアウトしています。またストーリーボード上もイメージは選んでいません。
override func viewDidLoad() { super.viewDidLoad() //imageTransImage01DepCell01.image = UIImage(named: "KoutsuShudanNone")
2018.10.17. 11:39現在のコード
現状でのコードは下記のとおりです。
Save01TableViewController.swift //略略略略 class Save01TableViewController: UITableViewController { //略略略略 @IBOutlet weak var buttonTransImage01DepCell01: UIButton! @IBOutlet weak var imageTransImage01DepCell01: UIImageView! //略略略略 //複数乗り物画像をボタンで変換するコードここから・・・・・ enum actionTag: Int { case onNext1 = 0 case onNext2 = 1 case onNext3 = 2 case onNext4 = 3 case onNext5 = 4 //抜けていたので追加 case onNext6 = 5 //抜けていたので追加 } /// 表示している画像の番号 var dispImageNo = 0 // 画像の名前の配列 let imageNameArray = [ "KoutsuShudanNone", "BusImg", "TrainImg", "KoutsuShudanOther" ] /// 表示している画像の番号を元に画像を表示する func displayImage() -> UIImage? { print ("ここまで来たdisplayImage ") //let image = displayImage() // 表示している画像の番号から名前を取り出し let name = imageNameArray[dispImageNo] // 画像を読み込み let image = UIImage(named: name) // 画像の番号が正常な範囲を指しているかチェック // 範囲より下を指している場合、最後の画像を表示 if dispImageNo < 0 { dispImageNo = 3 } // 範囲より上を指している場合、最初の画像を表示 if dispImageNo > 3 { dispImageNo = 0 } return image } @IBAction func onNext(_ sender: Any) { // 表示している画像の番号を1増やす dispImageNo += 1 print ("ここまで来たIBAction dispImageに1を加える") let image = displayImage() // 表示している画像の番号を元に画像を表示する guard let onNext = sender as? UIButton else { return } switch onNext.tag { // Image Viewに読み込んだ画像をセット case 0: imageTransImage01DepCell01.image = image print ("ここまで来た case 1") case 1: imageTransImage01DepCell02.image = image case 2: imageTransImage01DepCell03.image = image case 3: imageTransImage01DepCell04.image = image case 4: imageTransImage01DepCell05.image = image case 5: imageTransImage01DepCell06.image = image default: print("") return } }
2018.10.19現在のコード
// Save01TableViewController.swift //略略略略 //複数乗り物画像をボタンで変換するコード(ひとつのセルだけ) ここまで /// 表示している画像の番号 var dispImageNo = 0 // 4画像の名前の配列 let imageNameArray = [ "KoutsuShudanNone", "BusImg", "TrainImg", "KoutsuShudanOther" ] /// 表示している画像の番号を元に画像を表示する func displayImage() -> UIImage? { print ("ここまで来たdisplayImage ") //let image = displayImage() // 表示している画像の番号から名前を取り出し let name = imageNameArray[dispImageNo] // 画像を読み込み let image = UIImage(named: name) // 画像の番号が正常な範囲を指しているかチェック // 範囲より下を指している場合、最後の画像を表示 if dispImageNo < 0 { dispImageNo = 3 } // 範囲より上を指している場合、最初の画像を表示 if dispImageNo > 2 { dispImageNo = 0 } return image //fuzzballさん助言を反映 } @IBAction func onNext(_sender:Any){ //senderにすると落ちる // 表示している画像の番号を1増やす dispImageNo += 1 print ("ここまで来たIBAction dispImageに1を加える") let image = displayImage() //fuzzballさん助言を反映 // 表示している画像の番号を元に画像を表示する //displayImage() guard let onNext = _sender as? UIButton else { return } switch onNext.tag { // Image Viewに読み込んだ画像をセット case 0: imageTransImage01DepCell01.image = image print ("ここまで来た case 0")
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。