我是一名老iOS开发人员,现在我想制作一个简单的OS X状态栏应用程序。我需要在NSStatusItem上放一个 title ,但它应该分为两行,比如 iStatPro 网络功能。
我应该如何添加它?
答案 0 :(得分:1)
这是一个非常简单的例子。此示例显示两条线,两条简单的闪烁灯。
它使用NSView(自定义视图),其中包含两个NSTextField和两个NSImageWell。
红色和绿色光图像被添加到项目中并设置为IB中的图像井。
<强>的.m 强>
//
// AppDelegate.m
// Drawing Strings
//
// Created by Mark Hunte on 07/10/2013.
// Copyright (c) 2013 Mark Hunte. All rights reserved.
//
#import "AppDelegate.h"
@implementation AppDelegate
NSStatusItem *statusItem;
-(void)awakeFromNib{
//-- SET UP ATTRIBUTED TEXT FOR THE LINES. WHICH GIVES US MORE CONTROL OVER THE TEXT IF WE WANT IT.
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
//--SET THE HEIGHT OF THE LINES
paragraphStyle.maximumLineHeight = 12.f;
//-- TEXT FOR NSTEXTFIELD 1
NSAttributedString *attributedString = [[NSAttributedString alloc]
initWithString:@"Line 1"attributes: [NSDictionary
dictionaryWithObjectsAndKeys: [NSColor blackColor], NSForegroundColorAttributeName,paragraphStyle,NSParagraphStyleAttributeName ,nil]];
//-- TEXT FOR NSTEXTFIELD 2
NSAttributedString *attributedString2 = [[NSAttributedString alloc]
initWithString:@"Line 2"attributes: [NSDictionary
dictionaryWithObjectsAndKeys: [NSColor blackColor], NSForegroundColorAttributeName,paragraphStyle,NSParagraphStyleAttributeName ,nil]];
//--- SET THE TEXT
[_textField1 setAttributedStringValue:attributedString];
[_textField2 setAttributedStringValue:attributedString2];
//--- SET UP THE STATUS BAR
NSStatusBar *bar = [NSStatusBar systemStatusBar];
statusItem = [bar statusItemWithLength: NSVariableStatusItemLength] ;
//-- CONSTRAIN THE CUSTOM VIEWS SIZE
[_customView setFrameSize: NSMakeSize(50, 22)];
//--- ADD THE VIEW TO THE STATUS BAR ITEM
[statusItem setView:_customView];
//-- MAKE SURE IT DISPLAYS
[ _customView display];
[_customView setNeedsDisplay:TRUE];
//-- HIDE ONE OF THE IMAGE VIEWS
[_greenLight setHidden:TRUE];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
//-- SET UP A TIME TO BLINK THE TWO IMAGE VIEW LIGHTS
NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(blinkLights) userInfo:nil repeats:YES];
[timer fire];
}
-(void)blinkLights{
//-- IF IMAGE VIEW IS HIDDEN UNHIDE IT, IF SHOWN HIDE IT.
[_greenLight setHidden:![_greenLight isHidden]];
[_redLight setHidden:![_redLight isHidden]];
}
@end
我使用两个文本字段,因为我认为如果需要可以提供更好的控制。但是你可以使用一个和换行文本。 @“第1行\ nLine 2”
我还必须设置一个最大行高来帮助文本对齐,并且必须摆弄IB中的约束。
但结果是两条闪烁的灯光线:
答案 1 :(得分:0)
手动绘制文本的NSView子类(搜索绘制NSString),然后将视图添加到状态项。