Mac OS 获取和修改InspectorBar
NSTextView 自带的 Inspector Bar 集成了样式(Style)、字体(FontFamily)、字体样式(FontStyle)、字体大小(FontSize)、字体颜色(TextColor)、字体背景颜色(TextBackgroudColor)、粗体-斜体-下划线(FontTrait)、文本对齐方式(TextAlignment)、行间距(LineHeight)和列表符号(TextList)。Step1: 让 NSTextView 使用 Inspector Bar。可以在 xib 文件中选中 NSTextView,勾选Inspector Bar:
也可以在代码中实现:
;
Step2: 获取 Inspector Bar。通过遍历 .subviews ,打印 ,可以看到有一个类名为 __NSInspectorBarView 的subview。这就是我们想要获取的 Inspector Bar。代码如下
NSArray *subviews = .subviews;
id inspectorBar = nil;
for (NSView *subview in subviews) {
NSLog(@"%@",);
if () {
inspectorBar = subview;
}
}
Step3: 获取 Inspector Bar 上的控件。代码如下
NSArray *inspectorBarItems = ;
再通过数组的下标获取对应的控件。
完整的代码如下:
InspectorBarDemo.h //原意是想做一个通用的类,因此头文件并没有定义其他方法
1 #import <Cocoa/Cocoa.h>
2
3 @interface InspectorBarDemo : NSWindowController
4
5 @end
InspectorBarDemo.m
1 @interface InspectorBarFactory : NSObject{
2 NSTextView *firstTextView;
3 }
4 @property NSPopUpButton *jStyle;
5 @property NSPopUpButton *jFontFamily;
6 @property NSPopUpButton *jFontStyle;
7 @property id jFontSize; // NSTexturedComboBox
8 @property id jTextColor; // NSPopoverColorWell
9 @property id jTextBackgroudColor;// NSPopoverColorWell
10 @property NSSegmentedControl *jFontTrait;
11 @property NSSegmentedControl *jTextAlignment;
12 @property NSPopUpButton *jLineHeight;
13 @property NSPopUpButton *jTextList;
14
15 @property id inspectorBar;
16
17 - (id)initWithTextView:(NSTextView *)textView;
18 @end
19
20 @implementation InspectorBarFactory
21 - (id)initWithTextView:(NSTextView *)textView{
22 self = ;
23 if (self) {
24 firstTextView = textView;
25 _inspectorBar = ;
26 ;
27 }
28 return self;
29 }
30 - (id)getInspectorBar{
31 ;
32 NSArray *subviews = .subviews;
33 id inspectorBar = nil;
34 for (NSView *subview in subviews) {
35 NSLog(@"%@",);
36 if () {
37 inspectorBar = subview;
38 }
39 }
40 return inspectorBar;
41 }
42 - (NSArray *)inspectorBarItems{
43 return ;
44 }
45 - (void)factoryForInspectorBarItems{
46 NSArray *inspectorBarItems = ;
47 NSLog(@"%zi",inspectorBarItems.count);
48 _jStyle = inspectorBarItems;
49 _jFontFamily = inspectorBarItems;
50 _jFontStyle = inspectorBarItems;
51 _jFontSize = inspectorBarItems;
52 _jTextColor = inspectorBarItems;
53 _jTextBackgroudColor = inspectorBarItems;
54 _jFontTrait = inspectorBarItems;
55 _jTextAlignment = inspectorBarItems;
56 _jLineHeight = inspectorBarItems;
57 _jTextList = inspectorBarItems;
58 }
59 @end
60 #import "InspectorBarDemo.h"
61
62 @interface InspectorBarDemo ()
63 @property (strong) IBOutlet NSTextView *firstTextView;
64 @property (strong) IBOutlet NSBox *myBox;
65
66 @property InspectorBarFactory *inspectorBarFactory;
67 @end
68
69 @implementation InspectorBarDemo
70
71 - (id)initWithWindow:(NSWindow *)window
72 {
73 self = ;
74 if (self) {
75
76 }
77 return self;
78 }
79
80 - (void)windowDidLoad
81 {
82 ;
83
84 NSButton *button = [ initWithFrame:NSZeroRect];
85 ;
86 ;
87 ;
88 _inspectorBarFactory = [ initWithTextView:_firstTextView];
89 NSRect jFontSizeFrame = ;
90 ;
91 ;
92 jFontSizeFrame.origin.x = 20;
93 jFontSizeFrame.origin.y = 100;
94 ;
95 ;
96 }
97 - (void)buttonAction:(id)sender{
98 NSFont *font = ;
99 NSMutableParagraphStyle *paragraphStyle = [[ init] mutableCopy];
100 ;
101 initWithString:@"onecodego" attributes:@{NSFontAttributeName:font,NSParagraphStyleAttributeName:paragraphStyle}]];
102 }
103 @end
点击button效果如下:
经测试,移动位置之后的 Inspector Bar 的控件是可以正常使用的,添加到 Inspector Bar 上的控件也可以正常使用
页:
[1]