そのタイミングでselectedItemを保存してしまえばとりあえずOKだろう、ということで試してみる。
@defaults.setInteger(sender.indexOfSelectedItem,forKey:key)
これでいける。@defaultsはawakeFormNibの中で
@defaults=NSUserDefaults.standardUserDefaults
としたもの。あとは保存するときのkeyをactionを送ってくるsenderによって変えてやればいいんだけれど、senderって何よ?状態のためしばらく調べる。
いちいちコントロールに名前つけないでもいいからInterfaceBuilderって楽ね、と思ったけどこのケースだとちょいと困る。どうやって6つあるPopupButtonを見分けばいいんだ。
とりあえず動けばいい、という姿勢でいかざるを得ないので、PopupButtonごとにtagをつけてそれで見分けることにした。そんなんでこういうちょっと情けない感じのメソッドでコントロールの現在値を保存。
def changedPop(sender) case sender.tag when 0 key="trans" when 1 key="opt" when 2 key="L_butoon_click" when 3 key="L_button_D_click" when 4 key="R_button_click" when 5 key="R_button_D_click" else key="" end @defaults.setInteger(sender.indexOfSelectedItem,forKey:key) if key!="" endなんかVBAみたいだな、と自嘲しつつ。
あとは保存した値をawakeFormNibからこんなメソッドを呼び出すことで読み取る、と。
def set_popup_botton_index trans_pop.selectItemAtIndex(@defaults.integerForKey("trans")) option_pop.selectItemAtIndex(@defaults.integerForKey("opt")) l_click.selectItemAtIndex(@defaults.integerForKey("L_button_click")) l_d_click.selectItemAtIndex(@defaults.integerForKey("L_button_D_click")) r_click.selectItemAtIndex(@defaults.integerForKey("R_button_click")) r_d_click.selectItemAtIndex(@defaults.integerForKey("R_button_D_click")) end無事これでbinding相当の動作ができるので、いいとする。
次はこれをどうやってメインのコントローラーで読み込むか、ですな。
@defaults=NSUserDefaults.standardUserDefaultsって同じようにインスタンス変数作ったほうが、ことあるごとにUserDefaults読み込むより効率的だけど、UserDefaultsが変更された時にどうするか。Notification使うのがいいのかな。WarpはNotificationだったなあ。
0 件のコメント:
コメントを投稿