हालांकि इस 5 वर्ष सवाल यह है कि ... मैं इसे कैसे बनाने के लिए साझा करना चाहते।
एक्सकोड 7.1 के साथ ओएस एक्स 10.11 (एल कैपिटन) में अपने अनुभव में, उस एप्लिकेशन मेनू को दोहराना मुश्किल नहीं है। ऐसा लगता है कि ऐप्पल ने सभी अजीब सीमाओं को हटा दिया है।
नोट: यह कोड स्विफ्ट 3 के लिए अपडेट किया गया है, और केवल मैकोज सिएरा (10.12.1) में परीक्षण किया गया है।
//
// AppDelegate.swift
// Editor6MainMenuUI2Testdrive
//
// Created by Hoon H. on 2016/11/05.
// Copyright © 2016 Eonil. All rights reserved.
//
import Cocoa
/// You SHOULD NOT use `@NSApplicationMain`
/// to make your custom menu to work.
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {}
func applicationWillTerminate(_ aNotification: Notification) {}
}
func makeMainMenu() -> NSMenu {
let mainMenu = NSMenu() // `title` really doesn't matter.
let mainAppMenuItem = NSMenuItem(title: "Application", action: nil, keyEquivalent: "") // `title` really doesn't matter.
let mainFileMenuItem = NSMenuItem(title: "File", action: nil, keyEquivalent: "")
mainMenu.addItem(mainAppMenuItem)
mainMenu.addItem(mainFileMenuItem)
let appMenu = NSMenu() // `title` really doesn't matter.
mainAppMenuItem.submenu = appMenu
let appServicesMenu = NSMenu()
NSApp.servicesMenu = appServicesMenu
appMenu.addItem(withTitle: "About Me", action: nil, keyEquivalent: "")
appMenu.addItem(NSMenuItem.separator())
appMenu.addItem(withTitle: "Preferences...", action: nil, keyEquivalent: ",")
appMenu.addItem(NSMenuItem.separator())
appMenu.addItem(withTitle: "Hide Me", action: #selector(NSApplication.hide(_:)), keyEquivalent: "h")
appMenu.addItem({() -> NSMenuItem in
let m = NSMenuItem(title: "Hide Others", action: #selector(NSApplication.hideOtherApplications(_:)), keyEquivalent: "h")
m.keyEquivalentModifierMask = [.command, .option]
return m
}())
appMenu.addItem(withTitle: "Show All", action: #selector(NSApplication.unhideAllApplications(_:)), keyEquivalent: "")
appMenu.addItem(NSMenuItem.separator())
appMenu.addItem(withTitle: "Services", action: nil, keyEquivalent: "").submenu = appServicesMenu
appMenu.addItem(NSMenuItem.separator())
appMenu.addItem(withTitle: "Quit Me", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q")
let fileMenu = NSMenu(title: "File")
mainFileMenuItem.submenu = fileMenu
fileMenu.addItem(withTitle: "New...", action: #selector(NSDocumentController.newDocument(_:)), keyEquivalent: "n")
return mainMenu
}
let del = AppDelegate()
/// Setting main menu MUST be done before you setting app delegate.
/// I don't know why.
NSApplication.shared().mainMenu = makeMainMenu()
NSApplication.shared().delegate = del
NSApplication.shared().run()
वैसे भी, यह स्वचालित रूप से उत्पन्न होता है नहीं किया जा रहा है, और मैं उन सब को अपने आप को सेट करने के लिए किया था। मुझे यकीन नहीं है कि ऐसा करने का कोई दूसरा तरीका है या नहीं।
आप काम कर रहे उदाहरण here डाउनलोड कर सकते हैं।
नहीं यह काम नहीं करता है। NSMenu में संख्याऑफइटम्स मुझे 1 देता है जब मैं मेनूबार में "टेस्टमेनू फ़ाइल" आइटम को स्पष्ट रूप से देखता हूं। – Lothar
आह, मैंने आपकी परियोजना संरचना के बारे में एक धारणा व्यक्त की है। क्या आपने एक्सकोड में प्रोजेक्ट बनाया है और फिर nib/xib को पूरी तरह से हटा दिया है? या आप पूरी तरह से खरोंच से जा रहे हैं? यह ब्लॉग एंट्री मुख्य मेन्यू के साथ आप क्या अनुभव कर रहे हैं और एप्लिकेशन मेनू प्राप्त करने के लिए इस तरह से अपनी परियोजना को कैसे काम कर सकते हैं इसके बारे में बात करते हैं: http://lapcatsoftware.com/blog/2007/05/16/working -without-a-nib-part-1/ –
धन्यवाद यह है। और हां, मैं पूरी तरह से निर्बाध हूं, वास्तव में विकास के दौरान मैं एक सामान्य ईएलएफ a.out कार्यक्रम के रूप में भी एक बंडल संरचना के बिना चलाता हूं। यह मेनू के लिए ठीक से बाहर काम करता है। – Lothar