Swift

Swift:PullDownMenuの処理

PullDownMenueとPopUpMenuの違いは失念しましたが、どこかのブログに記載がありました。

PullDownMenuの場合、最初のmenuItemは表示用になります。インデックス#1から値を割り当てる必要があります。

それはすぐに対応できたのですが、チェックをどう制御すればいいか、すぐにわかりませんでした。

実装の仕方には、PullDownMenuが固定のケースと配列から割り付ける可変のケースがあります。後者の場合、On / Offをどう制御すればいいか、さっぱりわかりませんでした。

結局、次のようにしました。

  • 一番重要なことは、操作対象をNSPopUpButtonCellにすることです。個々のmenuItemとかNSMenuでは、うまくいきません。
    @IBOutlet var zOutRemoveMetaCell:NSPopUpButtonCell!
  • どのmenuItemがクリックされたか、そのインデックスをsaveするようにします。初期値は、このPullDownMenuのどれを初期値にするか開発者にわかるはずで、その値をsetしておけばいいです。ポイントは、初期設定の実行時に、zOutMapOverlayCell!.itemAtIndex(cm.rcMapOverlayIndex)?.state = NSOnStateのようにして、クリック状態を作り出すことです。
  • もし、ユーザーがクリックした時点で判定したいのであれば、初期値をマイナスとし、次のようにします。何番目のmenuItemかは、itemAtIndex(インデックス)?.stateのような書き方になります。どうせなら、[ ]にしてほしかった・・・。ここにたどり着くのに時間がかかりました。

if cm.rcRemoveMetaIndex >= 0 {  zOutRemoveMetaCell!.itemAtIndex(cm.rcRemoveMetaIndex)?.state = NSOffState  }
cm.rcRemoveMetaIndex  = zOutRemoveMetaCell!.indexOfSelectedItem
zOutRemoveMetaCell!.itemAtIndex(cm.rcRemoveMetaIndex)?.state = NSOnState

  • チェックを入れるとき、NSOnState / NSOffStateを使った方がきっといいのでしょうね。

Categories: Swift, 技術