LoginSignup
1
1

More than 5 years have passed since last update.

Triggered Segueを設定した場合のNSMenuItemの有効無効の切り替えは素直にできない

Posted at

今回はLGTM.app の開発中に得たちょっとした知見の共有になります。

StoryboardというかnibからNSMenuItemのTriggered Actionを設定すると、対応するキーボードショートカット(keyEquivalent) が簡単に設定できてオススメです。

Mac app Storyboard

今回Storyboard上でNSMenuItemのTriggered Actionを直接Segueにつなげてみたのですが、Windowが何枚でも開けてしまうという状態になりました。設定画面なので、2枚以上開けないようにしたいところです。
ss1.png

こういうとき、一般的にはNSMenuValidationのvalidateMenuItem(_:) をNSMenuItemのtargetとなるクラスに実装してメニューの有効無効を切り替えると思います。
しかしSegueをActionにした場合、NSMenuItemのtargetはStoryboardShowSegueTemplate というクラスのインスタンスになります。StoryboardShowSegueTemplateクラスは公開されていないため、NSMenuValidationを実装することができません。もしやと思いNSStoryboardSegueをサブクラスしてみましたが、ダメでした。というわけで、今回のケースではTriggered Segueは使わないというのが正解なようでした。

Sent ActionをIBActionに紐付け、IBActionを置いたクラスにNSMenuValidationを実装したところ、validateMenuItem(_:)が呼ばれるようになりました。あとはプログラムからNSWindowControllerをStoryboardIDで初期化して表示するようにすればいいでしょう。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1