そのタイミングで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 件のコメント:
コメントを投稿