Objective c 没有MainMenu.xib的Cocoa应用程序?
已经有了,但似乎没有明确的(当前的)答案。。是否真的可以专门从代码(无MainMenu.xib等)构建一个带有主菜单的Cocoa应用程序,从而在提交到应用商店时仍能通过审查?如果是这样的话,什么是魔法咒语(s)使这项工作Objective c 没有MainMenu.xib的Cocoa应用程序?,objective-c,cocoa,Objective C,Cocoa,已经有了,但似乎没有明确的(当前的)答案。。是否真的可以专门从代码(无MainMenu.xib等)构建一个带有主菜单的Cocoa应用程序,从而在提交到应用商店时仍能通过审查?如果是这样的话,什么是魔法咒语(s)使这项工作 如果有人能给我指出一份不是2002年的、对小牛队有用的教程或文档,我会得到额外的奖励。好吧,这以前当然是可能的 我首先查看main.m,用NSApplicationLoad()替换NSApplicationMain(),这样就得到了一个NSApplication对象 然后,您可
如果有人能给我指出一份不是2002年的、对小牛队有用的教程或文档,我会得到额外的奖励。好吧,这以前当然是可能的 我首先查看main.m,用NSApplicationLoad()替换NSApplicationMain(),这样就得到了一个NSApplication对象 然后,您可以使用标准NSMenu方法(-addItem:,等等)创建NSMenu,然后调用
[NSApplication sharedApplication].mainMenu = myMenu;
然后,你知道,做一个窗口,展示它,等等
当然,有很多菜单项是苹果在你发布时为你设置的,而当你这么做的时候你可能得不到。如果是这样的话,你必须手工添加它们
这真的不是我推荐的东西,但你可以试试。
我对Mac应用商店了解不够,不知道它是否能通过测试。我想你可以把它从C#翻译成Objective-C。它没有使用任何特殊的Mono或Xamarin功能
阅读博客文章了解一些背景知识。同时,我将把main.cs和AppDelegate.cs的版本粘贴到这里:
main.cs:
using System;
using MonoMac.AppKit;
namespace XibFreeCocoaApp
{
public class XibFreeCocoaApp
{
static void Main (string[] args)
{
NSApplication.Init ();
var application = NSApplication.SharedApplication;
application.Delegate = new AppDelegate();
application.Run ();
}
}
}
AppDelegate.cs:
using System;
using System.Drawing;
using MonoMac.AppKit;
using MonoMac.Foundation;
namespace XibFreeCocoaApp
{
public class AppDelegate : NSApplicationDelegate
{
public override void FinishedLaunching (MonoMac.Foundation.NSObject notification)
{
CreateMenu (NSProcessInfo.ProcessInfo.ProcessName);
var window = new NSWindow (
new RectangleF (0, 0, 400, 300),
NSWindowStyle.Titled,
NSBackingStore.Buffered,
false) {
Title = "Xib Free Cocoa App with Menu"
};
window.CascadeTopLeftFromPoint (new PointF (20, 20));
window.MakeKeyAndOrderFront(null);
}
void CreateMenu (string appName)
{
var mainMenu = new NSMenu();
var appMenuItem = new NSMenuItem ();
mainMenu.AddItem (appMenuItem);
var appMenu = new NSMenu ();
var quitMenuItem = new NSMenuItem (String.Format ("Quit {0}", appName), "q", delegate {
NSApplication.SharedApplication.Terminate(mainMenu);
});
appMenu.AddItem (quitMenuItem);
appMenuItem.Submenu = appMenu;
NSApplication.SharedApplication.MainMenu = mainMenu;
}
}
}
请注意,上述代码不会更改具有子菜单的菜单项的标题-为此,您需要为子菜单指定标题,如下所示:
NSMenuItem someMenuItem = new NSMenuItem("Title 1");
NSMenu someMenuItemSubMenu = new NSMenu();
someMenuItemSubMenu.Title = "Title 2";
someMenuItem.Submenu = someMenuItemSubMenu;
在这种情况下,显示的互动程序将是“标题2”,而不是“标题1”(实际上“标题1”将被完全忽略)。在启动主菜单的同时,您是否希望启动其他窗口xib。xib??不太可能,我只是想确保我真正了解幕后发生的事情,虽然我认识到IB是编写生产代码的最佳方式,但它在我对正在发生的事情的理解上留下了空白,所以我正试图在没有IB的情况下完成这项工作。下面是一个答案:如何在没有代码(包括主菜单)中的xib文件的情况下制作整个Cocoa应用程序:冒着听起来愚蠢的风险。。我的main.m看起来像这样,我在哪里做这些更改呢?int main(int argc,const char*argv[]){return NSApplication(argc,argv);}您必须删除这一行,然后再添加一行……调用NSApplicationLoad(),然后连接菜单。这真的不是一件容易的事,有很多事情你必须用手去做,我甚至都没想过。