专栏首页macOS 开发学习Mac开发基础练习:制作一个状态栏(NSStatusBar)上的App(二)

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

我们在练习(一)中完成了状态栏图标点击,弹出内容视图的效果,但是项目看起来还有些体验不是非常符合用户习惯,(例如点击应用之外的其他地方,popover 并没有自动消失)我们继续来添加和完善一些用户功能,使得应用看起来有好一点的使用体验,接下来我们为popover添加鼠标的事件监听和退出应用的功能。

为了响应系统的鼠标事件,我们需要使用Cocoa框架中的NSEvent类来为应用添加监听对象,在Mac 开发中,通常我们都是被(鼠标或键盘)事件驱动的,当OSX系统接收到一个事件后,会添加到窗口服务进程的处理队列中,然后通过服务进程异步的派发事件(事件可能会被copy)给应用程序,应用程序会通过delegate响应对应的事件。

应用程序在响应事件的过程中,会生成一个monitor(监听)对象,通常情况下我们完成监听事件后,不必对这个对象进行手动释放,系统API会在合适的时机进行release。

1.1 选中ViewController.m文件,添加鼠标左键点击事件监听,实现代码如下图:

运行应用,点击状态栏图标显示popover后,用鼠标点击应用窗口外的其他地方,这时你会发现popover会自动隐藏起来了,这样的效果与之前的相比,要更合适操作一些。除此之外,我们继续为popover 添加一个button,来实现退出应用的功能。

1.2 选中SBPopViewController.xib文件,添加button,并设置入下图:

添加button

1.3 选中SBPopViewController.m,为button添加事件响应代码如下图:

添加按钮响应代码

再次运行应用,如果没有错误,点击状态栏图标,界面大概样子应该入下图:

应用运行效果

点击退出按钮,你会发现应用将结束进程并退出。现在我们这个应用可以实现显示popover,并点击应用之外的地方可以隐藏popover,并可以手动退出应用,这些基本功能已经都完成了,但从项目开始到现在,window窗口一直都伴随每次启动显示(它在我们这个应用看起来没什么用处),针对我们只设计一个在系统状态栏的demo应用来说,window是可以不要的,那么我们来对window进行处理。

1.4 选中Main.storyboard文件,从项目中删除,并清空工程配置,入下图:

删除main.storyboard

如果这时你运行工程,会发现之前的window不显示了(因为已经删除了嘛),但是状态栏的图标也没有显示,应用运行起来,但桌面没有任何我们需要的效果,这时我们在打开活动监视器,发现应用其实是正常运转的(如下图)。

活动监视器显示demo运行正常

这是由于我们之前使用的xib文件加载window,系统为我们默认做了一些其他方面的事,比如再加载window之前,创建应用对象,设置应用代理,配置窗口设置等,那系统是在哪里做的这些事情呢?其实是在main.m文件里的调用了系统的NSApplicationMain()这个重要的函数,这个函数屏蔽了很多细节,这对新入门的来说是件好事,可以很容易的进行业务代码的工作而不必关系系统启动的细节;但如果我们需要研究系统在启动时的一些行为时,它也给我们带来了难度。

像iOS中一样,应用启动加载完成后,设置UI是从AppDelegate的这个方法-applicationDidFinishLaunching:开始的,如果我们在上面的工程中对这个方法设置调试断点,你会发现应用启动后,根本没有调用这个方法,也就是所我们删除了main.storyboard文件后,系统不再自动的为我们设置应用的delegate,需要我们自己手动在main.m中进行设置。

1.5 选中main.m文件,实现代码入下图:

main.m文件实现代码

1.6 因为我们去除了window,因此ViewController对我们来说已经没有价值了,我们只需要把之前在ViewController中写的代码,放置到AppDelegate.m中来实现就可以了,这样我们就可以删除ViewController这个类了。项目修改后的样子应该是下面这个图的的示例:

AppDelegate.m文件

如果你在这中间的步骤没有错误,那么再次运行工程,你会发现状态栏的上图标又出现了,并且我们之前实现的功能也都可以正常响应了^_^

整个工程的代码,可以从这里下载StatusBarDemoApp,好了,我们这个小练习工程介绍完了,算是为新上手Mac OSX开发的同学略微做些基础帮助,由于笔者的能力有限,如果在这个小练习工程中有错误的地方,还请各位随时回复我,或在评论里告知,这样也可以让其他人看到,共同进步。

 结束语

项目小练习只是一个学习的开始,大家可以对这个小练习再添加一些功能:比如菜单栏,比如设置开机自动启动,再或者运行后隐藏Dock上的图标,对代码结构再进行合理的组织,比如把事件监听的方法,封装为一个工具类,或者使用tableview代替SBPopViewController,添加网络请求数据等,这样就可以由这个小练习慢慢变成自己的一个小Mac 应用了,祝各位能有所收获~。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

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

    代码行者
  • 新手必备mac系统大全

    楼主结合自身体验以及网络资料整理讲述Mac OS基础知识。文章为方便理解部分内容会以windows做参考,但绝不是比较孰好孰坏,请各位切勿对号入座在评论区引战。

    知识与交流
  • App项目实战之路(四):UI篇

    上一篇文章[原型篇]发布之后,就开始设计UI了,包括Icon和界面UI,周一到周五晚上一般花两到三到小时,周六日的时候则有五六个小时,最终用了一个星期多才设计完...

    Keegan小钢
  • 课程上线 -“新手入门 : Windows Phone 8.1 开发”

    经过近1个月的准备和录制,“新手入门 : Windows Phone 8.1 开发”系列课程已经在Microsoft 虚拟学院上线,链接地址为:http://w...

    ShiJiong
  • 一个Mac系统,能让程序员编程效率提升30%

    Mac 系统一向以提供高效的工作环境著称,iOS、Android和服务端程序员都可以轻松的在Mac上搭建舒适的开发环境。

    一墨编程学习
  • python编程

    使用python编写客户端不是一件很复杂的事情。比如说,基本上不管是mac版本,还是windows版本、linux版本,一般python都默认安装了Tkinte...

    企鹅号小编
  • Mac下提升工作效率的方式

    Mac 系统一向以提供高效的工作环境著称,iOS、Android和服务端程序员都可以轻松的在Mac上搭建舒适的开发环境。笔者主要从事iOS开发,一般在macbo...

    哲洛不闹
  • 开发者的如何优雅的使用OSX

    Mac对于IT开发者来说是最好的开发工具,没有之一。

    老马
  • 开发者的如何优雅的使用OSX

    Mac对于IT开发者来说是最好的开发工具,没有之一。 但是对于大部分人来说,第一个接触的PC操作系统都是Windows系统,此文将带大家优雅的快速学习和使用Ma...

    老马
  • macOS 入门指南

    如果你刚刚买了一台 Mac 电脑,却发现用起来不是很顺手;或者你工作、生活使用的是 Windows 电脑,偶尔接触到 Mac 电脑,却不知道怎么使用,我希望通过...

    程序员充电站
  • ESA2GJK1DH1K基础篇: 测试APP使用SmartConfig绑定Wi-Fi 设备并控制设备

      该程序需要的基础知识:  https://www.cnblogs.com/yangfengwu/category/1566194.html   所有源码开源...

    杨奉武
  • 抓包工具Charles

    抓包(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作。也用来检测网络安全。抓包也经常被用来进行数据截取等。对于...

    用户7798898
  • 苹果自研ARM架构芯片,iOS系统更新「抄袭」安卓?10年来最精彩的WWDC值得你起立鼓掌

    2020年,许多顶级会议都转为线上,万众瞩目的苹果WWDC发布会也31年来首次转移到线上举办,赶了一波「virtual」的风潮。

    新智元
  • 苹果新系统很鸿蒙!iPad终于能写代码了,iPhone竟成异地恋神器 | WWDC 2021

    在全球疫情还未缓解的情况下,今年,苹果的WWDC开发者大会,和去年一样全场除了库克“空无一人”。

    量子位
  • STM32+CH395Q(以太网)基本控制篇(自建物联网平台)-功能测试-Android使用组播绑定CH395Q,并通过MQTT和模组实现远程通信控制 这节测试一下

    <p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/CH395Q/my.h...

    杨奉武
  • 一步一步,开始上手Mac 开发(一)

    通过本文,你可以创建你的第一个Mac Application,编译并指定版本号,而且经过练习,你应该掌握:

    代码行者
  • 用NW.js构建跨平台桌面应用(2)-原生界面API

    实际取得的值( 表示manifest文件中配置的应用名 ): - Win: $LOCALAPPDATA%/<name> - Linux: ~/.config/<...

    江米小枣
  • 手把手 | 如何在你的iPhone上建立第一个机器学习模型(Apple最新CoreML框架入门)

    大数据文摘
  • Mac快速上手指南

    上周刚入手了2017版MacBookPro,预装macOS High Sierra。第一次接触Mac系统,经过一周的使用,简单总结下与Windows相比最常用的...

    williamwong

扫码关注云+社区

领取腾讯云代金券