- 締切済み
xcodeでスイッチ(UISwitch)の使い方
ルーレットで罰ゲームの内容みたいなのをまわすアプリを作っていて、 ルーレットに入れる項目を設定画面でスイッチを使って選ぶというものなのですが、 画面を設定画面からゲーム画面に戻すと、設定した内容がもとに戻ってしまい、どうやったらそれが解消できるのでしょうか? 説明があまりうまくできないのですが、どうぞご回答よろしくお願いします!
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Lchan0211b
- ベストアンサー率61% (573/930)
> switch.onがゲーム画面になるといつのまにかOFFになってしまいます。 もし、設定画面への遷移にStoryBoardのSegueを使ってるのだったら、 設定画面を呼び出すたびに新しいインスタンスで画面が生成されます。 (古い画面は破棄されます。) このため、新しい設定画面のswitch.onを参照して 設定値が戻ったと勘違いしているんじゃないでしょうか? 設定画面で設定した値は、そのビューコントローラの中に保持するのではなく アプリを起動している間破棄されないどこか別の場所に保持しておいて、 設定画面呼び出し時(viewDidLoad時等)に、最新の状態を設定画面に反映 する必要があります。
元画面A 設定画面B として、AからBにいって、ある値をへんこうして、Bをぬけて、Aに戻ってきた。 case-1 この時、Aの表示構成要素も、すでに、Bの処理の中で、更新されているのであれば、普通は画面は、更新されるでしょう。 ちなみに、表示構成要素とは、 label.text などのViewの上で表示そのものに使われるもの。 更新されない場合は、その表示構成要素にたいして、setNeedsDisplayなどを書く。 case-2 Bの中で、Aのデータを操作するのが難しくて更新できないが、Aにもどった時に、Bでいじった値をチェックして 必要なら画面更新処理をしたい場合 この場合は、Aの画面が出る前のラストチャンスは、AのViewControllerのviewWillAppear だけなので ここで、必要な表示構成要素を更新して、それだけで、再描画してくれないなら、viewあるいは、subviewに、setNeesDisplayなどをかける くらいで、いくのでは。
この問題は、2つのところが、ポイントです。 1 出先で変更した値を、元に戻せてない。問題A 2 値は戻せているが、戻った時に、画面が変更した値に対応して更新されない。 問題B で、どっちなのかは、NSLogなり、ブレークポイントなり使えば、わかるでしょうか、まず、それの 補足をどうぞ。
補足
問題Bの方です!
補足
補足遅れました! switch.onがゲーム画面になるといつのまにかOFFになってしまいます。 一応設定画面ではonやOFFに切り替わる機能は確認しました!