美文网首页开发点滴#iOS#HeminWonMAC开发
Mac开发基础练习:制作一个状态栏(NSStatusBar)上的

Mac开发基础练习:制作一个状态栏(NSStatusBar)上的

作者: 代码行者 | 来源:发表于2016-11-12 21:29 被阅读2846次

    项目开发是最有效果的学习途径(没有之一),现在我们从开发一个小的状态栏上的App入门,通过逐步实现功能,来渐渐上手熟悉Mac OSX上的基础控件使用方法。通过本练习,希望能够帮助有兴趣的同学掌握如下基础知识:

    * NSStatusBar 控件的使用

    * NSPopover 的基本使用

    * (鼠标)事件监听方法

    * 结束App的方法 

    好了,开始动手!

    1.1 创建演示项目:StatusBarDemoApp

    选取项目模版 项目名称

    在Mac OSX系统中,屏幕的右上角就是我们说的状态栏(NSStatusBar),一直是常驻应用的必争之地。我们只需要创建一个item ,然后将创建好的item加载到状态即可,我们只需要使用NSStatusBar的statusItemWithLength:方法就可以了(这个方法会创建好一个NSStatusItem,并且将它自动的添加到状态栏中)。

    1.2 选中ViewController.m文件,添加代码

    实现代码

    1.3 添加图片资源

    添加图片资源到项目工程中

    如果没有出错,运行项目,你应该看到一个空的窗口,而且在屏幕的右上角已经出现了我们应用的常驻标志^_^,是不是感觉很容易啊~

    项目运行结果

    这时你点击状态栏上的图标,它没有任何反应,因为我们还没有给它添加事件响应的方法。我们希望点击它能够弹出一个视图,显示它的内容或者功能,下面我们就来接着实现它。

    NSPopover 提供了在屏幕内容视图上显示额外信息内容的一种方式(其实这个类似于在iPad开发中是常见的UIPopoverPresentationController),它的定位相对与现有内容。

    在ViewController中添加popover属性,并在viewDidLoad中进行初始化和配置。

    1.4 现在ViewController.m实现代码:

    添加popover代码,并设置

    如果这时运行项目工行,我们尝试点击状态栏图标,系统会提示[General] The contentViewController ((null)) or contentViewController.view is nil.这个错误信息,是因为我们没有为popover设置一个可以显示的内容视图控制器,下面我们来创建一个NSViewController来管理popover的内容视图:

    1.5 添加SBPopViewController

    添加新文件 创建SBPopViewController,并使用xib

    1.6 设置popviewController的view

    设置SBPopViewController的视图内容

    1.7 选中ViewController.m文件,实现代码

    设置contentViewController

    现在再次运行工程,如果没有错误,我们就可以看到大致类似下面的这样界面了,这样我们就实现了可以在系统状态栏中添加应用的常驻标志,点击它,并可以弹出一个内容展示窗口了。

    运行结果

    关于这个练习项目的演示代码,有兴趣的同学可以在github来下载StatusBarDemo

    下一篇,我们继续来实现关闭popover、 鼠标事件的监听,window窗口的处理以及应用退出的方法

    祝大家玩的愉快~

    相关文章

      网友评论

      • Unicodeo:首先感谢博主发的这篇高质量文章,其次是:怎么把自己创建的statusItem放到最右边,以免被音乐歌词挤出去
        代码行者:@Unicodeo :flushed:QQ没有在最右边啊,我的QQ都在中间呢
        Unicodeo:@代码行者 尝试设置了优先级为INT_MAX - 1,但是没效果;可是QQ是怎么做到的呢?始终往最右边
        代码行者:@Unicodeo :blush:状态栏上的图标位置是不能自己设置的,这个是系统处理的
      • 蜗牛量化:博主请教个问题
        mac 如果通过程序隐藏menu栏 或者系统设置自动隐藏菜单栏后 点击程序窗口 菜单栏不自动显示如果解决 谢谢?
        蜗牛量化:@代码行者 我知道
        只是系统开启自动隐藏状态栏后 拖动窗口后偶尔移动鼠标到屏幕顶部无法自动调出状态栏
        代码行者:@零下一度_ab25 :cry:系统状态栏隐藏于app窗口响应没有关系
      • GiantAxe77:想问下楼主你添加的icon是多大尺寸的?
        代码行者:@GiantAxe 没有规定大小,可以根据你的需求自己使用大小合适的图片
        GiantAxe77:@代码行者 恩恩看到demo里有尺寸了谢谢, 那请问statusbar图片的大小规定就是24*24么?
        代码行者:@GiantAxe 24x24:smile:
      • 瞬间看见永远:右上角的图标颜色怎么设置对应啊,黑色状态栏白色背景,黑色背景白色图片。求详细
        代码行者:@瞬间看见永远 这个需要将图片(就是添加到状态栏上的那个图片)的template属性设置为true,系统就会自动根据主题渲染相应的部分
      • A_rcher34:多谢,学习了
      • Hunter琼:这个图片多大一般??
        代码行者:30 * 30 你可以试试看
      • 九剑仙:APP处于运行状态,我想要点击状态栏按钮的时候让他处于窗口的最前面,怎么写
        九剑仙:@九剑仙 再问你个问题,注册快捷键,网上找到了,但是注册的是全局的,app退到后台之后,快捷键依然有效,怎么注册局部的,只有当app处于前台的时候才响应,我现在是这样处理的,退到后台的时候注销快捷键,进入前台再注册,但是感觉有点麻烦,有没有别的方法
        九剑仙:@代码行者 没有点击叉号的时候,这句不行,找到了,再加一句这个[NSApp activateIgnoringOtherApps:YES];
        代码行者:调用window的makeKeyAndOrderFront方法
      • 121d44c6b0b3:大神,你的状态栏是黑色的,我的状态栏是白色的,怎么实现图标的切换呢?或者说怎么获取当前状态栏的颜色呢?
        代码行者:@Mr_KT 系统状态栏的图标一般不用适配啊..一般都是一个固定尺寸的图片就好了
        121d44c6b0b3:@代码行者 那我要开发,不是要设置图标吗?,不会自动适配的,在哪里设置呢?
        代码行者:@Mr_KT 状态栏的是在MacOS X系统设置中配置的:smirk:
      • 就是一个春天的花朵:感觉和iOS开发没什么区别啊...
        MonkeyHan:正好需要 多谢楼主! 说没什么区别的一定是没有完整开发过MacOSX软件的,很多坑在前面等着
        就是一个春天的花朵:@代码行者 受教
        代码行者:@ozill iOS脱生于Mac,但差别还是不少。控件和运行机制都有很多不一样:relieved:

      本文标题:Mac开发基础练习:制作一个状态栏(NSStatusBar)上的

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