質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2811閲覧

pickerの選んだ操作によって次の画面の背景を変化させたい

退会済みユーザー

退会済みユーザー

総合スコア0

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/08/06 07:38

編集2018/08/06 13:07

ピッカーの操作で次の画面を変化させたいです。
二つピッカーがあって、片方では変化せず、もう片方の動作で変化させるようにしたいです。
しかし、どのようなコードを書いたらいいかわからず、困っています。
助けてください。よろしくお願いします
普通のコード

``import UIKit class secondViewController: UIViewController,UIPickerViewDelegate,UIPickerViewDataSource { @IBOutlet weak var seibetupicker: UIPickerView! @IBOutlet weak var agepicker: UIPickerView! let seibetudataList = ["男性","女性","不明","指定なし"] let agedataList = ["10代","20代","30代","40代","50代","60代","70代","80代","90代"] override func viewDidLoad() { super.viewDidLoad() seibetupicker.delegate = self seibetupicker.dataSource = self agepicker.delegate = self agepicker.dataSource = self // Do any additional setup after loading the view. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func numberOfComponents(in pickerView: UIPickerView) -> Int { // 表示する列数 return 1 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { // アイテム表示個数を返す if pickerView == agepicker { // 1個目のピッカーの設定 return agedataList.count }else{ return seibetudataList.count } return agedataList.count } // UIPickerViewDelegate func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { // 表示する文字列を返す if pickerView == agepicker { // 1個目のピッカーの設定 return agedataList[row] }else { return seibetudataList[row] } return agedataList[row] }
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "SecondView" { let secondViewController:ViewController = segue.destination as! ViewController
var Datalist:String = "" override func viewDidLoad() { super.viewDidLoad() print(Datalist) if ?????????? == Int(1) { self.view.backgroundColor = UIColor(patternImage: UIImage(named: "AOZORA")!) }else{self.view.backgroundColor = UIColor(patternImage: UIImage(named: "nighthanabi")!) }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

razuma

2018/08/06 08:51

現状できているところまでのpickerを使った画面と、画面遷移を行なうようなソースなどはありますでしょうか?
退会済みユーザー

退会済みユーザー

2018/08/06 08:54

写真を挿入できないのでコードを貼ればいいですかね..
razuma

2018/08/06 09:01

はい、コードを貼っていただければ大丈夫です。
guest

回答1

0

ベストアンサー

まず、現在PickerViewで選択されている値を取得します。
取得の仕方としては

agepicker.numberOfRows(inComponent: 0)

とすると、今pickerで選ばれている番号が取得できます。
または以下のようにdidSelectRowでpickerが選択された時に値を取得するようにしても良いかもしれません。

var selectSeibetu = "" var selectAge = "" // 省略 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { if pickerView == agepicker { selectAge = agedataList[row] print(selectAge) }else{ selectSeibetu = seibetudataList[row] print(selectSeibetu) } }

あとは画面遷移のときに次のビューに値を渡すやり方かと思います。
おそらくstoryboardでのを遷移かと思いますが、値渡しについては色々とやり方があると思いますので調べてみてください。
以下、参考にひとつ。
Swift初心者メモ Storyboardのsegueで遷移した画面に値を渡すす

何かわからない点があればコメントください。

コメントへの回答追記:
遷移先の画面で受け取った値を元に分岐できればなんでも大丈夫なのでif文でも大丈夫です。
背景の変え方はself.view.backgroundColorで変えられます。
なので例えばparameterに何か値が入ってくるとすれば以下のようになるかと思います。

if parameter == 1 { self.view.backgroundColor = UIColor.blue }else{ self.view.backgroundColor = UIColor.black }

コメントへの回答追記:
どんな画像を背景にしたいのかにもよりますが、背景に画像を使う場合には
self.view.backgroundColor = UIColor(patternImage: UIImage(named: "gazou")!)
こんな感じでパターンを繰り返すような感じにするか。
UIImageViewをviewに追加してあげるようなかたちになります。
【Swift】背景に画像を設置する
上記のようにコード上から追加しても良し、あらかじめstoryboardに追加しておいたImageviewのimageだけ変えるも良しです。

parameterはあくまでも例えばの話なので、遷移先に受け渡すパラメータはなんでも良いです。
例えば性別で変えたいのであれば、男性のときは0を渡す、女性のときは1を渡す、のようにしておけば判別できると思います。まずは画面遷移でパラメータを受け渡せるかを確認すると良いかと思います。

コメントへの回答追記:
??????????はDatalistになるかと思います。例えば以下のようにするとか。
if Datalist == "1"

ちなみにですが、secondViewControllerから違う画面へ遷移するときですよね?
Datalistが定義されている遷移先をthirdViewControllerとすると以下のようになります。

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "SecondView" { let thirdViewController:ViewController = segue.destination as! ViewController thirdViewController.Datalist = "1" } }

以上のようにするとthirdViewcontrollerでDatalistに"1"が入った状態になります。
サンプルがViewcontrollerからsecondViewControllerへの遷移だったので紛らわしかったですかね。

コメントへの回答追記:
受け渡しているパラメータはseibetupickerで変化するものになっていますか?
固定値を渡しているのであればif文が同じ場所しか通りません。
性別で変えたいのであれば例えばDatalistはvar Datalist:Int = 0のようにIntにしておいて

thirdViewController.Datalist = seibetupicker.numberOfRows(inComponent: 0)

とするとthirdViewControllerのDatalistに違う値が入ってくるので

if Datalist == 0 { self.view.backgroundColor = UIColor(patternImage: UIImage(named: "AOZORA")!) }else{ self.view.backgroundColor = UIColor(patternImage: UIImage(named: "nighthanabi")!) }

のようにするとDatalistが0のときはAOZORA、それ以外のときはnighthanabiになるかと思います。

投稿2018/08/06 10:00

編集2018/08/06 13:53
razuma

総合スコア1313

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/08/06 10:50

何を選択したか取得して、背景を変えるためにはどうすれば良いでしょうか。 普通にif文を用いればいいですかね?
退会済みユーザー

退会済みユーザー

2018/08/06 11:54

parameterのところがseibetulistだと性別によって色が変化しますかね? あと、色じゃなくて背景画像を変えることはできますかね?
退会済みユーザー

退会済みユーザー

2018/08/06 12:19

なんどもすみません。parameterのところをseibetudataListにしたところUse of unresolved identifier 'seibetudataList'と出てしまいました。宣言はしていると思うのですがなぜなのでしょうか?教えていただきたいです。
razuma

2018/08/06 12:29

コードを貼ってくださーい、遷移前の画面と遷移後の画面の2画面分あるかと思います。遷移先の画面でseibetudataListとしていますか?遷移先の画面では前の画面で宣言されているものは使えません。遷移先の画面で新たに受け取り用の変数を作ってそこで受け取るようにします。参考URLで言うとsecondViewController.sendTextに値を設定します、sendTextは遷移先の画面で宣言します。ちなみにコードの囲い方が微妙に惜しいです。```で包んであげるかんじです。 ``` ここにコードを書く ``` こんな感じです。
退会済みユーザー

退会済みユーザー

2018/08/06 13:07 編集

コードを追加しました。 ????????の部分がわかっていないところです。
退会済みユーザー

退会済みユーザー

2018/08/06 13:37

最後にすみません。ビルドは成功するようになったのですが性別を変えても背景が"lighthanabi"のファイルになってしますのですが何が原因なのでしょうか?
退会済みユーザー

退会済みユーザー

2018/08/07 05:12 編集

長い間この質問に答えていただきありがとうございます。 これからも色々と問題が発生し、回答依頼をすると思いますがその時はまたお世話になります。 よろしくお願いします。
razuma

2018/08/06 14:33

解決して良かったですー。がんばってくださーい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問