sexevil 发表于 2015-12-30 11:29:11

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]
查看完整版本: Mac OS 获取和修改InspectorBar