Creating a Status Bar Application
2012-11-13 12:44
134 查看
原文网址:http://cocoatutorial.grapewave.com/2010/01/creating-a-status-bar-application/
Creating a Status Bar Application
This tutorial assumes you have a basic knowledge of Objective-C. In this tutorial, we will walk-through on how to create a status bar only application for the Mac OS X. The final project can be downloaded from here.What is a Menu Bar Extra?
They are extra menus that are visible at the right side of the menu bar. Some of the in-built menu extras are the battery indicator, time indicator. Menu bar extras are typically used to display application/system status information. Two things to note about
the Menu bar extras are that
If there are too many menu bar extras, the OS will remove some of them to avoid crowding and to provide space for application menus.
The menu can also be disabled by the user.
Some websites call this kind of application a menulet application or a status bar application.
Implementation
To start off, we create a new Project in Xcode.
Open Xcode. File->New Project. Choose the “Cocoa Application” and click “Choose”. Next,
Xcode should ask you to give a name for the project. Pick a name and directory for the project. In this example, the project name will be “StatusMenuApp”. Once you have chosen a project name and location, click “Save”.
Xcode should have created a new project with some default files. The two folders “Classes” and “Resources” are the most important folders for this walk-through. You can ignore the remaining folders for this example.
First, we will add an NSMenu outlet in the In the StatusMenuAppAppDelegate.h to which the menus can be referenced to. Also we will add a NSStatusItem that will eventually become the status bar menu item.
@interface StatusMenuAppAppDelegate : NSObject { NSWindow *window; IBOutlet NSMenu *statusMenu; NSStatusItem * statusItem; } @property (assign) IBOutlet NSWindow *window; @end
List of 'Outlets' available in the class
Final view of nib file
We will now create the MenuItems that will be available in the application. To do this, we open the MainMenu.xibin
the Interface Builder. For this example, we will not touch the existing Menu in nib. Drag and drop another “Menu” object from the Library into the Document window. Give each of the MenuItem a unique title. Now we have to link the Menu object to the statusMenu
outlet. To do this, CTRL+click on the StatusMenuAppDelegate object and drag and release the pointer on the Menu object. This should open up a panel titled “Outlets”. This panel will show all the Outlets available in the StatusMenuAppDelegate class. In our
example, there is only one outlet. Click on the ’statusMenu’ to link the Menu object to statusMenu. Finally, delete the Window object. Save the nib file and close Interface Builder.
Now we move on to actually creating the Status Bar Menu. In the “StatusMenuAppDelegate.m”, we override the function awakeFromNib. A awakeFromNibmessage
is sent to every object that is loaded from a Nib(.nib or .xib) file. Firstly, we will create the NSStatusItem. To do so, we have to call
- (NSStatusItem *)statusItemWithLength:(CGFloat)length
The parameter length can take the following two values:
NSVariableStatusItemLength -Makes the status item length dynamic, adjusting to the width of its contents.
NSSquareStatusItemLength – Sets the status item length to the status bar thickness.
For this example, we will use the NSVariableStatusItemLength.
statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];
Secondly, we have to add the statusMenu to the statusItem. To do so, we all the following code:
[statusItem setMenu:statusMenu];
Thirdly, we give a title for the statusItem. This will be seen in the Menu Extras.
[statusItem setTitle:@"Status"];
If you would like to see an image instead of text, you can use the following methods:
- (void)setImage:(NSImage *)image -(void)setAlternateImage:(NSImage *)image
Lastly, we want to highlight the menu when the user clicks on it. So we use the following code.
[statusItem setHighlightMode:YES];
By default, the highlight mode will be set to NO.
The StatusMenuAppDelegate.m file should look like this now.
#import "StatusMenuAppDelegate.h" @implementation StatusMenuAppDelegate @synthesize window; - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { // Insert code here to initialize your application } -(void)awakeFromNib{ statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain]; [statusItem setMenu:statusMenu]; [statusItem setTitle:@"Status"]; [statusItem setHighlightMode:YES]; } @end
Since we want the app to only appear on the status menu, the last step is the most important one.We need to modify the StatusMenu-Info.plist file. Double click to open this file. Add a new property with key “Application is agent (UIElement)” and value as TRUE(i.e.
check the box). Your .plist should look like this.
Final view of pList
Final output of the program should look like this:
相关文章推荐
- Creating a Status Bar Application
- S 7 - Status bar overlaps the view
- View controller-based status bar appearance
- 修炼九阴真经Windows Phone开发 (7):本地化应用程序栏Localizing an Application Bar 下
- Android navigation bar and the status bar
- 【WPF】The example of progress bar, label status changed by background worker
- 【Android基础学习】Android使用fitsSystemWindows属性实现–状态栏【status_bar】各版本适配方案
- 关于:HTTP Status 503 - This application is not currently available
- MYIP网站信息状态条 (MyIP Status Bar for IE)——挑战极限,一秒钟评价一个网站!
- Showing progress bar in a status bar pane
- Flex4 controlBarContent 替换Flex ApplicationControlBar
- Creating Dialogbased Windows Application (4) / 创建基于对话框的Windows应用程序(四)Edit Control、Combo Box的应用、Unicode转ANSI、Open File Dialog、文件读取、可变参数、文本框自动滚动 / VC++, Windows
- Creating a WebDynpro ALV Application in 30 easy steps
- 如何创建一个Tab bar Application (xcode 4.0或4.1中的方式)
- [iOS]Status bar hidden
- Android使用fitsSystemWindows属性实现--状态栏【status_bar】各版本适配方案
- Using Flex/Deploying application / Creating a wrapper/About the wrapper
- Error creating bean with name 'sessionFactory' defined in class path resource [spring/applicationCon
- [译]Creating a Stock Widget in ASP.NET MVC Application
- 利用反射打开系统的通知栏STATUS_BAR