美文网首页
macOS开发之顶部菜单NSMenu

macOS开发之顶部菜单NSMenu

作者: chasitu | 来源:发表于2020-12-11 16:39 被阅读0次

在iOS开发中为了后期维护的便利多数人都建议纯代码开发,可以从iOS转战macOS的小伙伴们都建议直接用storyboard或者XIB开发,原因是macOS开发中很多逻辑代码的调用都需要手动去调用,不像UIKit里面很多初始化步骤系统内部都做好了,但是从学习的角度来说我个人建议纯代码开始入手,当然难度也不小,资料很少等,但是办法总比困难多,我们今天进军顶部菜单栏,这里只介绍搭建顶部菜单栏的搭建布局,内部系统方法的调用比较多,目前了解有限,请大家见谅

动工:直接上代码

在info.plist文件里设置如下:

<key>AppMenu</key>
<array>
    <dict>
        <key>items</key>
        <array>
            <dict>
                <key>items</key>
                <array/>
                <key>name</key>
                <string>About Application</string>
                <key>selector</key>
                <string>orderFrontStandardAboutPanel:</string>
                <key>target</key>
                <string>NSApp</string>
            </dict>
            <dict>
                <key>items</key>
                <array/>
                <key>name</key>
                <string>Preference...</string>
                <key>selector</key>
                <string>orderFrontStandardAboutPanel:</string>
                <key>target</key>
                <string>NSApp</string>
            </dict>
            <dict>
                <key>items</key>
                <array/>
                <key>name</key>
                <string>quite</string>
                <key>selector</key>
                <string>terminate:</string>
                <key>target</key>
                <string>NSApp</string>
            </dict>
        </array>
        <key>name</key>
        <string>Application</string>
        <key>selector</key>
        <string></string>
        <key>target</key>
        <string></string>
    </dict>
    <dict>
        <key>items</key>
        <array>
            <dict>
                <key>items</key>
                <array>
                    <dict>
                        <key>items</key>
                        <array>
                            <dict>
                                <key>items</key>
                                <array/>
                                <key>name</key>
                                <string>MiniZoome</string>
                                <key>selector</key>
                                <string>orderFrontStandardAboutPanel:</string>
                                <key>target</key>
                                <string>NSApp</string>
                            </dict>
                        </array>
                        <key>name</key>
                        <string>MiniZoome</string>
                        <key>selector</key>
                        <string>orderFrontStandardAboutPanel:</string>
                        <key>target</key>
                        <string>NSApp</string>
                    </dict>
                </array>
                <key>name</key>
                <string>MiniZoome</string>
                <key>selector</key>
                <string>orderFrontStandardAboutPanel:</string>
                <key>target</key>
                <string>NSApp</string>
            </dict>
            <dict>
                <key>items</key>
                <array/>
                <key>name</key>
                <string>Zoom</string>
                <key>selector</key>
                <string>orderFrontStandardAboutPanel:</string>
                <key>target</key>
                <string>NSApp</string>
            </dict>
            <dict>
                <key>items</key>
                <array/>
                <key>name</key>
                <string>Help</string>
                <key>selector</key>
                <string>terminate:</string>
                <key>target</key>
                <string>NSApp</string>
            </dict>
        </array>
        <key>name</key>
        <string>Window</string>
        <key>selector</key>
        <string></string>
        <key>target</key>
        <string></string>
    </dict>
</array>

代码如下

#pragma mark 根据info.plist AppMenu设置,创建菜单
-(void)defaultMenu{

    NSMenu *mainMenu = [[NSMenu alloc] init];

    for (NSDictionary *item in [[NSBundle mainBundle] objectForInfoDictionaryKey:@"AppMenu"]) {
        NSMenuItem *item1 = [[NSMenuItem alloc] initWithTitle:[item objectForKey:@"name"] action:nil keyEquivalent:@""];

        [mainMenu addItem:item1];
        [mainMenu setSubmenu:[self createMenu:[item objectForKey:@"name"] withItem:[item objectForKey:@"items"]] forItem:item1];
    }

    NSApp.mainMenu = mainMenu;
    return;

}
-(NSMenu *)createMenu:(NSString *)name withItem:(NSArray *)itemDict{
    NSMenu *menu = [[NSMenu alloc] initWithTitle:name];
    for (NSDictionary *dict in itemDict) {
        NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:[dict objectForKey:@"name"] action:nil keyEquivalent:@""];

        item.target = NSClassFromString([dict objectForKey:@"target"]);

        item.action = NSSelectorFromString([dict objectForKey:@"selector"]);

        [menu addItem:item];
        //分割线
        [menu addItem:[NSMenuItem separatorItem]];
        if([[dict objectForKey:@"items"] count] >0){
            [menu setSubmenu:[self createMenu:[dict objectForKey:@"name"] withItem:[dict objectForKey:@"items"]] forItem:item];
        }
    }

    return menu;
}

完结

相关文章

网友评论

      本文标题:macOS开发之顶部菜单NSMenu

      本文链接:https://www.haomeiwen.com/subject/fhnjgktx.html