Cocoa开发中的窗口、面板与控制器实践
立即解锁
发布时间: 2025-08-25 02:25:10 阅读量: 2 订阅数: 8 

### Cocoa开发中的窗口、面板与控制器实践
在Cocoa开发中,窗口、面板和控制器是构建用户界面的重要组成部分。下面将详细介绍如何操作和使用它们。
#### 1. NSPanel的操作
首先,从对象库窗口中拖出一个NSPanel,查看属性检查器。这里有一些额外的选项,如样式弹出菜单和几个复选框。样式选项包括:
- **Utility**:选择此样式会使面板具有独特外观,并使其浮动在应用程序的其他窗口之上。
- **HUD**:让窗口具有更独特的“平视”外观。
你可以尝试不同的样式,观察它们对面板外观的影响。面板的行为与普通窗口也有所不同,在全屏下拉菜单中,面板可以标记为辅助窗口,这意味着它将在全屏模式下浮动在窗口之上,对于查找或信息面板等影响其他窗口文档的功能很有用。探索完成后,从nib文件中删除该面板。
#### 2. 标准系统面板
Cocoa除了通用窗口类,还提供了一些专门的窗口子类,用于满足各种应用程序的需求。
##### 2.1 颜色面板(NSColorPanel)
颜色面板允许用户选择颜色。下面是使用颜色面板设置屏幕上文本颜色的具体步骤:
1. 假设在Xcode中创建的项目里,MainMenu.xib文件已打开,从对象库中拖出一个换行标签(多行标签)和一个按钮,将按钮标题设置为“Show Color Panel”。
2. Xcode会为我们创建一个应用程序委托类,假设类前缀为WL,则类名为WLAppDelegate。打开助理编辑器面板,若未自动加载WLAppDelegate.h文件,可使用面板顶部的导航栏打开。
3. 从多行标签Control - 拖动到WLAppDelegate.h文件,在现有@property声明下方添加一个名为title的输出口。
4. 从“Show Color Panel”按钮Control - 拖动到新添加的输出口下方,添加一个名为showColorPanel:的动作。
完成后,WLAppDelegate.h文件内容如下:
```objc
#import <Cocoa/Cocoa.h>
@interface WLAppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
@property (weak) IBOutlet NSTextField *title;
- (IBAction)showColorPanel:(id)sender;
@end
```
切换到.m文件,添加showColorPanel:方法和changeColor:方法的实现:
```objc
#import "WLAppDelegate.h"
@implementation WLAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
}
- (IBAction)showColorPanel:(id)sender
{
// create the color panel
NSColorPanel *panel = [NSColorPanel sharedColorPanel];
// bring the color panel to the front of the screen
[panel orderFront:nil];
}
- (void)changeColor:(id)sender
{
// in this method, the "sender" parameter is the NSColorPanel
// itself. We just ask it for its color, and pass it along to
// the "title" object.
[self.title setTextColor:[sender color]];
}
@end
```
需要注意的是,在WLAppDelegate.h文件中,@property声明有不同的注解。对于窗口引用使用assign注解,而对于用户界面元素的属性通常使用weak注解。这是因为自动引用计数(ARC)对不同类的处理方式不同,NSWindow不支持ARC,所以使用assign注解,其效果类似于weak注解但适用于非ARC启用的类。
showColorPanel:方法会在按钮点击时被调用,而changeColor:方法会在用户在颜色面板中点击颜色时被调用,这得益于Cocoa的响应者链概念。响应者链是一个临时对象集合,在应用程序运行时动态收集,用于查询对象是否实现特定动作。以下是响应者链的查找顺序示例:
1. 窗口的“第一响应者”(当前聚焦并接受键盘输入的视图)及其上级视图,一直到窗口内的视图层次结构顶部。
2. 窗口本身。
3. 窗口的委托。
4. 应用程序对象NSApp。
5. 应用程序对象的委托。
当用户点击按钮时,会按顺序询问这些对象是否实现了特定方法,直到有对象回答YES,该对象的方法将被调用。
保存工作并运行应用程序,点击按钮会弹出颜色面板,点击不同颜色,所选文本的颜色将立即改变。实际上,使用NSColorWell可以更轻松地实现相同功能,只需在控制器类中声明一个属性来包含NSColor,并使用Cocoa绑定将NSColorWell的Value属性和NSTextField的文本颜色属性绑定到该属性即可。
##### 2.2 字体面板(NSFontPanel)
字体面板与颜色面板不同,它没有对应的启动控件,但可以很容易地与系统格式菜单集成。以下是使用字体面板的步骤:
1. 让WindowLab窗口稍微高一些,复制打开颜色面板的按钮,将新按钮标题设置为“Show Font Panel”。
2. 打开显示WLAppDelegate.h文件的助理编辑器面板,从按钮Control - 拖动到该面板,在现有动作方法下方插入一个名为showFontPanel的新动作。
添加动作后,WLAppDelegate.h文件中会添加以下方法声明:
```objc
- (IBAction)showFontPanel:(id)sender;
```
WLAppDelegate.m文件中会添加以下存根:
```objc
- (IBAction)showFontPanel:(id)sender {
}
```
切换到.m文件,填充s
0
0
复制全文
相关推荐









