朧の.Netの足跡
問合せ先:support@oborodukiyo.info サイト内検索はこちら 
Swift メニューのMenuItemの有効無効の設定方法





Storyboardでメニューのオンオフの仕方の一例を紹介したいと思います。
AppDelegateの中にvalidateMenuItemメソッドを作成します。
有効にしたい条件の時にtrueを返し、それ以外の無効にしたい場合はfalseを返します。
またどのメニュー項目かはここではmenuItem.Titleで判別しています。
因みにViewControllerの中でvalidateMenuItemを作成してもうまく行きませんでした。

            import Cocoa
            @NSApplicationMain
            class AppDelegate: NSObject, NSApplicationDelegate {
                //ViewControllerを保持
                //メニューのオンオフに関係する変数を持っているので参照できるように変数で持っておく。
                //ViewControllerの中で設定しています。
                var mainView: ViewController? = nil
                func applicationDidFinishLaunching(_ aNotification: Notification) {
                    // Insert code here to initialize your application
                }
                func applicationWillTerminate(_ aNotification: Notification) {
                    // Insert code here to tear down your application
                }
                override func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
        
                     switch menuItem.title {
                     case "CSV読み込み":
                        return true
                     case "CSV保存":
                        if mainView != nil && mainView!.blOpenedCSV == true {
                            return true
                        } else {
                            return false
                        }
                     case "行をコピー":
                        if mainView != nil {
                            if mainView!.blOpenedCSV == true && mainView!.tv.selectedRow > -1 {
                                return true
                            } else {
                                return false
                            }
                        } else {
                            return false
                        }
                     default:
                        return true
                    }
                }
                @IBAction func doReadCSV(_ sender: Any) {
                    if mainView != nil {
                        mainView!.readCSV(self)
                    }
                }
    
                @IBAction func doSaveCSV(_ sender: Any) {
                    if mainView != nil {
                        mainView!.saveCSV(self)
                    }
                }
    	    }

            class ViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate {
                //アプリケーションの変数
                var myApp = NSApplication.shared.delegate as! AppDelegate
    
                override func viewDidLoad() {
                    super.viewDidLoad()
                    // Do any additional setup after loading the view.
                    //AppDelegateの変数に自身のインスタンスを保存することによって、
                    //AppDelegateでのメニューのオンオフをする為の助けにします。
                    myApp.mainView = self
        
                }
                override var representedObject: Any? {
                    didSet {
                    // Update the view, if already loaded.
                    }
                }
            }

        








良いやや良い普通やや悪い悪い

投稿日時評価コメント