今pickerで取得したデータを二つ先のviewcontrollerに値渡しをしたい状況です。
swift
1import UIKit 2 3class secondViewController: UIViewController,UIPickerViewDelegate,UIPickerViewDataSource { 4 5 @IBOutlet weak var seibetupicker: UIPickerView! 6 @IBOutlet weak var agepicker: UIPickerView! 7 8 let seibetudataList = ["男性","女性","不明","指定なし"] 9 let agedataList = ["10代","20代","30代","40代","50代","60代","70代","80代","90代"] 10 11 var selectedSeibetu: String? 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 seibetupicker.delegate = self 16 seibetupicker.dataSource = self 17 agepicker.delegate = self 18 agepicker.dataSource = self 19 // Do any additional setup after loading the view. 20 } 21 22 override func didReceiveMemoryWarning() { 23 super.didReceiveMemoryWarning() 24 25 agepicker.numberOfRows(inComponent: 0) 26 // Dispose of any resources that can be recreated. 27 } 28 func numberOfComponents(in pickerView: UIPickerView) -> Int { 29 // 表示する列数 30 return 1 31 } 32 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 33 // アイテム表示個数を返す 34 if pickerView == agepicker { 35 // 1個目のピッカーの設定 36 return agedataList.count 37 }else{ 38 return seibetudataList.count 39 } 40 return agedataList.count 41 } 42 // UIPickerViewDelegate 43 44 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 45 // 表示する文字列を返す 46 if pickerView == agepicker { 47 // 1個目のピッカーの設定 48 return agedataList[row] 49 }else { 50 return seibetudataList[row] 51 } 52 return agedataList[row] 53 } 54 55 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 56 if pickerView == seibetupicker { 57 selectedSeibetu = seibetudataList[row] 58 } 59 } 60 61 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 62 if segue.identifier == "ViewController" { 63 let ViewController:ViewController = segue.destination as! ViewController 64 if (selectedSeibetu == "男性"){ 65 ViewController.Datalist = 0 66 }else{ 67 ViewController.Datalist = 1 68 } 69 } 70 } 71
import UIKit class ViewController: UIViewController,UITextFieldDelegate { @IBOutlet weak var yourlavel: UILabel! @IBOutlet weak var textfield: UITextField! @IBOutlet weak var imageView: UIImageView! @IBAction func ageback(_ sender: Any) { self.presentingViewController?.presentingViewController?.dismiss(animated: true, completion: nil) } @IBAction func pictureback(_ sender: Any) { self.dismiss(animated: true, completion: nil) } // 選択肢 var Datalist:Int = 0 override func viewDidLoad() { super.viewDidLoad() print(Datalist) if Datalist == 0 { self.view.backgroundColor = UIColor (patternImage: UIImage(named: "vacation")!) } else{self.view.backgroundColor = UIColor(patternImage: UIImage(named: "nighthanabi")!) } // Do any additional setup after loading the view, typically from a nib. yourlavel.text = "" self.imageView.image = image } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }
SecondViewControllerからViewControllerに直接segueで接続する、というやり方は既に検討済みなのでしょうか?
そもそもViewControllerへのキャストで良いのですか?識別子がsecondViewControllerなのであればSecondViewControllerへのキャストになるのでは?エラーメッセージだとThirdViewControllerからキャストできないとなっていますので、もう少し整理して考えてみてはいかがでしょうか。必要最小限のコードで動作を確認してみるとか。
直接接続は試しているのですがそのコードが読み込まれず、ブレイクポイントを試しましたが駄目でした
t_obara様 すいません キャストとはどうすればできるのでしょうか 教えてくださいませ よろしくお願いします
as! の部分です。
あーほんとだ。identifierがsecondViewControllerだからsecondViewControllerにキャストしないと識別子を取り違えてない限り失敗しますね。
あとsegueがどんな感じに接続されてるか見てみないとなんとも言えないですね。プラスαコードも。
xAxis様 どのコードを追加したらよろしいのでしょうか? segue関連のコードは全て追加してあげるべきですかね...
asの先の部分をviewcotrollerにしたのですがhas no segue with identifier 'ViewControllerこういうエラーが出てしまいました
質問に関わる部分は全て上げると回答率も上がるんじゃないかと。あとキャストはsecondViewController以外では無理じゃないかなーと推測します。
分かりました。なぜ無理だと思ったのでしょうか?
prepare関数内においてsegue.identifier == "secondViewController"という条件がありますね。この中の識別子は大抵segue.destinationまたはsegue.sourceのクラス名と同一にします。つまりこのコードから推測出来る事はsegueの接続先のクラス名はsecondViewControllerではないかという事です。他にも作成されたクラス名はViewController、secondViewController、ThirdViewControllerというものがあるだろうと推測出来ます。がsegueの接続のされ方は全てを推測出来る訳ではありません。なので質問に答えるためには他の情報が必要になる、つまりコードやsegueの接続の仕方がどうなっているか知りたいのです。
ちなみにあくまで推測です。エラーを見る限りではsegueの接続先はThirdViewControllerのようですし。色々ごちゃごちゃになってるんじゃないかなと思います。んで、推測で物を言うのは限度があるんです。それに推測するのにもエネルギーを消費します。でも最初からコードやstoryboardの状態が分かれば無用な推測をする必要が無いわけです。だから質問をする時のテンプレートには該当するソースコードを貼る為の欄が用意されているだと思いますよ。
xAxis様 コードを追加しました
うん。。。まぁこれじゃ分かんないよね。
誰か答えてくれる人が見つかるといいですね。
そうですね。
ちなみに、二画面では実現できているのですか?まずはそちらで確認されてはいかがでしょうか。また、元画面と遷移先画面のUIViewControllerがそれぞれ何かを提示されないと正確に指摘することが難しいかと思います。
t_obara様 二画面での実現とはどういうことなのでしょうか。 コードを全て追加しましたので確認の方をよろしくおねがいします。
回答1件
あなたの回答
tips
プレビュー