Mac 开发中内置对话框和面板的使用指南
在 Mac 应用程序开发中,内置对话框和面板是与用户进行交互的重要工具。它们可以用于显示消息、让用户选择文件等操作。下面将详细介绍如何使用这些内置的对话框和面板。
1. 对话框文本显示
默认情况下,对话框仅显示“Alert”字样。若要自定义对话框,可以定义消息文本和信息文本。消息文本以粗体显示,用于吸引用户的注意力;信息文本则显示在消息文本下方,提供关于对话框消息的额外解释。
alert.messageText = @"Message Text";
alert.informativeText = @"Informative Text";
2. 显示抑制复选框
当首次使用新浏览器时,可能会弹出一个对话框询问是否将该浏览器设为默认浏览器,此对话框包含一个抑制复选框,勾选后对话框将不再重复弹出。
alert.showsSuppressionButton = YES;
3. 对话框按钮显示
默认的对话框只有一个“OK”按钮。若需要显示多个按钮并自定义按钮文本,可使用
addButtonWithTitle
方法。
[alert addButtonWithTitle:@"OK"];
按钮添加顺序为:第一个添加的按钮显示在最右侧,后续添加的按钮依次向左排列。通常不建议使用超过三四个按钮,以免对话框显得杂乱。
若要确定用户点击了哪个按钮,可使用
switch
语句结合
NSAlertFirstButtonReturn
、
NSAlertSecondButtonReturn
和
NSAlertThirdButtonReturn
常量。
switch ([alert runModal])
{
case NSAlertFirstButtonReturn:
NSLog (@"First button clicked");
break;
case NSAlertSecondButtonReturn:
NSLog (@"Second clicked");
break;
case NSAlertThirdButtonReturn:
NSLog (@"Third clicked");
break;
default:
break;
}
4. 创建并显示对话框的步骤
- 打开之前修改过的 MyTest 程序。
- 双击 Resources 文件夹中的 MainMenu.xib 文件,打开 Interface Builder 并显示用户界面窗口。
- 删除当前用户界面上显示的所有项目。
- 将一个 Push Button 对象拖放到用户界面窗口上。
- 点击 Classes 文件夹中的 MyTestAppDelegate.h 文件,并修改代码如下:
#import <Cocoa/Cocoa.h>
@interface MyTestAppDelegate : NSObject <NSApplicationDelegate> {
NSWindow *window;
}
@property (retain) IBOutlet NSWindow *window;
-(IBAction) displayDialog:(id)sender;
@end
-
选择“File ➤ Save”或按
Command + S保存更改。 - 点击 Classes 文件夹中的 MyTestAppDelegate.m 文件,并修改代码如下:
#import "MyTestAppDelegate.h"
@implementation MyTestAppDelegate
@synthesize window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// 在此插入初始化应用程序的代码
}
- (void)dealloc {
[window release];
[super dealloc];
}
-(IBAction) displayDialog:(id)sender
{
NSAlert *alert = [[NSAlert alloc] init];
alert.salertStyle = NSWarningAlertStyle;
[alert addButtonWithTitle:@"OK"];
[alert addButtonWithTitle:@"Cancel"];
alert.messageText = @"Message Text";
alert.informativeText = @"Informative Text";
switch ([alert runModal])
{
case NSAlertFirstButtonReturn:
NSLog (@"OK clicked");
break;
case NSAlertSecondButtonReturn:
NSLog (@"Cancel clicked");
break;
default:
break;
}
[alert release];
}
@end
-
选择“File ➤ Save”或按
Command + S保存更改。 - 再次双击 Resources 文件夹中的 MainMenu.xib 文件。
- 右键点击 MainMenu.xib 窗口中的“My Test App Delegate”图标,弹出一个提示窗口。
-
点击“Received Actions”标题下
displayDialog右侧的圆圈,然后将鼠标拖动到用户界面上的按钮上。 -
选择“File ➤ Save”或按
Command + S保存更改。 - 切换到 Xcode,点击“Build and Run”按钮或选择“Build ➤ Build and Run”。若代码无误,将弹出一个空白窗口。
- 点击按钮,对话框将出现。
- 点击“OK”按钮,对话框消失。
- 重复步骤 14 和 15,但这次点击“Cancel”按钮。
- 退出程序。
-
选择“Run ➤ Console”或按
Command + Control + R,应能看到NSLog命令输出的打印语句。
5. 创建打开面板
许多 Mac 程序需要让用户选择计算机上存储的文件,为此几乎所有 Mac 程序都使用一种特殊的窗口——打开面板。
NSOpenPanel *myPanel = [NSOpenPanel openPanel];
要显示打开面板并确定用户点击的按钮(“Open”或“Cancel”)以及用户选择的文件,可按以下步骤操作:
if ([myPanel runModal] == NSOKButton)
{
NSArray *filenamesArray = myPanel.URLs;
NSString *filename = [filenamesArray objectAtIndex:0];
NSLog (@"File = %@", filename);
}
6. 创建并显示打开面板的步骤
- 打开之前修改过的 MyTest 程序。
- 双击 Resources 文件夹中的 MainMenu.xib 文件,打开 Interface Builder 并显示用户界面窗口。
- 删除当前用户界面上显示的所有项目。
- 将一个 Push Button 对象拖放到用户界面窗口上。
- 点击 Classes 文件夹中的 MyTestAppDelegate.h 文件,并修改代码如下:
#import <Cocoa/Cocoa.h>
@interface MyTestAppDelegate : NSObject <NSApplicationDelegate> {
NSWindow *window;
}
@property (retain) IBOutlet NSWindow *window;
-(IBAction) displayPanel:(id)sender;
@end
-
选择“File ➤ Save”或按
Command + S保存更改。 - 点击 Classes 文件夹中的 MyTestAppDelegate.m 文件,并修改代码如下:
#import "MyTestAppDelegate.h"
@implementation MyTestAppDelegate
@synthesize window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// 在此插入初始化应用程序的代码
}
- (void)dealloc {
[window release];
[super dealloc];
}
-(IBAction) displayPanel:(id)sender
{
NSOpenPanel *myPanel = [NSOpenPanel openPanel];
if ([myPanel runModal] == NSOKButton)
{
NSArray *files = myPanel.URLs;
NSURL *filename = [files objectAtIndex:0];
NSLog (@"File = %@", filename);
}
}
@end
-
选择“File ➤ Save”或按
Command + S保存更改。 - 双击 Resources 文件夹中的 MainMenu.xib 文件,打开 Interface Builder。
- 点击 MainMenu.xib 窗口中的“Window (My Test)”图标,显示用户界面窗口。
- 右键点击“My Test App Delegate”图标,弹出一个提示窗口。
-
点击“Received Actions”类别下
displayPanel右侧的圆圈,将其拖动到用户界面上的按钮上。 -
选择“File ➤ Save”或按
Command + S保存更改。 - 切换到 Xcode,点击“Build and Run”按钮或选择“Build ➤ Build and Run”。若代码无误,将弹出一个空白窗口。
- 点击按钮,打开面板将出现。
- 选择一个文件(可根据需要打开不同的文件夹),然后点击“Open”按钮。
- 退出程序。
-
选择“Run ➤ Console”或按
Command + Control + R,应能看到NSLog命令输出的打印语句。
7. 限制文件类型
打开面板通常会显示计算机上的所有文件类型,但可以限制其仅显示某些类型的文件,如 PDF 或 Microsoft Word 文件(
.doc
和
.docx
)。
NSArray *fileTypes = [NSArray arrayWithObjects:@"doc", @"pdf", nil];
myPanel.allowedFileTypes = fileTypes;
8. 允许多文件选择
默认情况下,用户通常只能从打开面板中选择单个文件,但可以通过按住
Command
键并点击每个文件来选择多个文件。
[myPanel setAllowsMultipleSelection:YES];
若允许用户选择多个文件,可使用循环来检索每个选定的文件名。
if ([myPanel runModal] == NSOKButton)
{
NSArray *filenamesArray = myPanel.URLs;
for (NSURL *element in filenamesArray) {
NSLog(@"File = %@", element);
}
}
9. 限制文件类型并允许多文件选择的步骤
- 打开之前修改过的 MyTest 程序。
- 双击 Resources 文件夹中的 MainMenu.xib 文件,打开 Interface Builder 并显示用户界面窗口。确保用户界面上有一个按钮,若没有则删除当前显示的项目并拖放一个 Push Button 对象。
- 点击 Classes 文件夹中的 MyTestAppDelegate.m 文件,并修改代码如下:
#import "MyTestAppDelegate.h"
@implementation MyTestAppDelegate
@synthesize window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// 在此插入初始化应用程序的代码
}
- (void)dealloc {
[window release];
[super dealloc];
}
-(IBAction) displayPanel:(id)sender
{
NSOpenPanel *myPanel = [NSOpenPanel openPanel];
NSArray *fileTypes = [NSArray arrayWithObjects:@"doc", @"jpg", @"pdf", nil];
myPanel.allowedFileTypes = fileTypes;
myPanel.allowsMultipleSelection = YES;
if ([myPanel runModal] == NSOKButton)
{
NSArray *filenamesArray = myPanel.URLs;
for (NSURL *element in filenamesArray) {
NSLog(@"File = %@", element);
}
}
}
@end
-
选择“File ➤ Save”或按
Command + S保存更改。 - 双击 Resources 文件夹中的 MainMenu.xib 文件,打开 Interface Builder。
-
右键点击 MainMenu.xib 窗口中的“My Test App Delegate”图标,确保
displayPanel方法已连接到用户界面上的按钮。若未连接,点击“Received Actions”类别下displayPanel右侧的圆圈,将其拖动到按钮上。 -
选择“File ➤ Save”或按
Command + S保存更改。 - 切换到 Xcode,点击“Build and Run”按钮或选择“Build ➤ Build and Run”。若代码无误,将弹出一个空白窗口。
- 点击按钮,打开面板将出现。
-
按住
Command键并点击两个或更多文件,然后点击“Open”按钮。 - 退出程序。
-
选择“Run ➤ Console”或按
Command + Control + R,应能看到NSLog命令输出的打印语句。
通过以上步骤,你可以在 Mac 应用程序中灵活使用内置的对话框和打开面板,实现与用户的有效交互。
10. 创建保存面板
保存面板与打开面板类似,但它允许用户通过输入新文件名并选择存储该文件的文件夹来创建文件(不过保存面板本身不会实际创建文件,需要编写 Objective - C 代码来完成此操作)。
NSSavePanel *myPanel = [NSSavePanel savePanel];
要显示保存面板并检查用户是否点击了“Save”按钮,然后检索用户输入的文件名,可以使用以下代码:
if ([myPanel runModal] == NSOKButton)
{
NSLog (@"Path chosen = %@", myPanel.URL);
NSLog (@"File typed = %@", myPanel.URL.lastPathComponent);
}
11. 创建并使用保存面板的步骤
- 打开之前修改过的 MyTest 程序。
- 双击 Resources 文件夹中的 MainMenu.xib 文件,打开 Interface Builder 并显示用户界面窗口。确保用户界面上有一个按钮,若没有则删除当前显示的项目并拖放一个 Push Button 对象。
- 点击 Classes 文件夹中的 MyTestAppDelegate.m 文件,并修改代码如下:
#import "MyTestAppDelegate.h"
@implementation MyTestAppDelegate
@synthesize window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// 在此插入初始化应用程序的代码
}
- (void)dealloc {
[window release];
[super dealloc];
}
-(IBAction) displayPanel:(id)sender
{
NSSavePanel *myPanel = [NSSavePanel savePanel];
if ([myPanel runModal] == NSOKButton)
{
NSLog (@"Path chosen = %@", myPanel.URL);
NSLog (@"File typed = %@", myPanel.URL.lastPathComponent);
}
}
@end
-
选择“File ➤ Save”或按
Command + S保存更改。 - 切换到 Xcode,点击“Build and Run”按钮或选择“Build ➤ Build and Run”。若代码无误,将弹出一个空白窗口。
- 点击按钮,保存面板将出现。
- 点击“Save As”文本字段并输入一个文件名,如“My Files”。
- 退出程序。
-
选择“Run ➤ Console”或按
Command + Control + R,应能看到NSLog命令输出的打印语句。
12. 保存面板限制文件类型
保存面板继承了打开面板的特性,因此也可以使用
allowedFileTypes
属性自动为用户在保存面板中输入的每个文件添加特定的扩展名。
NSArray *fileTypes = [NSArray arrayWithObjects:@"xyz", nil];
myPanel.allowedFileTypes = fileTypes;
总结
对话框可用于显示简短消息,暂时中断用户操作。可以自定义警告对话框内的文本以显示不同类型的消息。一般来说,对话框不仅可以显示信息,还能获取用户的选择,以便程序做出相应的响应。
如果程序需要打开或保存文件,可以使用内置的打开和保存面板。这两个面板提供了标准的 Mac 打开和保存界面,允许用户在不同的驱动器和文件夹之间切换以搜索文件。要使这些打开和保存面板真正发挥作用,需要编写 Objective - C 代码来检索或保存文件。
通过使用内置的对话框和打开、保存面板,可以创建出外观和行为与其他 Mac 程序相似的应用程序。用户对这些对话框和打开/保存面板的操作方式比较熟悉,这样你就可以将更多的时间集中在编写使程序实现有用功能的代码上。
操作流程总结表格
| 操作类型 | 关键代码 | 操作步骤 |
|---|---|---|
| 对话框文本显示 |
alert.messageText = @"Message Text"; alert.informativeText = @"Informative Text";
| 无 |
| 显示抑制复选框 |
alert.showsSuppressionButton = YES;
| 无 |
| 对话框按钮显示 |
[alert addButtonWithTitle:@"OK"];
| 无 |
| 创建并显示对话框 | 见步骤 4 代码 | 1 - 18 步 |
| 创建打开面板 |
NSOpenPanel *myPanel = [NSOpenPanel openPanel];
| 无 |
| 创建并显示打开面板 | 见步骤 6 代码 | 1 - 18 步 |
| 限制文件类型(打开面板) |
NSArray *fileTypes = [NSArray arrayWithObjects:@"doc", @"pdf", nil]; myPanel.allowedFileTypes = fileTypes;
| 无 |
| 允许多文件选择(打开面板) |
[myPanel setAllowsMultipleSelection:YES];
| 无 |
| 限制文件类型并允许多文件选择 | 见步骤 9 代码 | 1 - 12 步 |
| 创建保存面板 |
NSSavePanel *myPanel = [NSSavePanel savePanel];
| 无 |
| 创建并使用保存面板 | 见步骤 11 代码 | 1 - 9 步 |
| 保存面板限制文件类型 |
NSArray *fileTypes = [NSArray arrayWithObjects:@"xyz", nil]; myPanel.allowedFileTypes = fileTypes;
| 无 |
操作流程 mermaid 流程图
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B(选择操作类型):::process
B --> C{是否为对话框操作}:::decision
C -->|是| D(创建并显示对话框):::process
C -->|否| E{是否为打开面板操作}:::decision
E -->|是| F(创建并显示打开面板):::process
E -->|否| G(创建并使用保存面板):::process
D --> H(结束操作):::process
F --> H
G --> H
H --> I([结束]):::startend
通过以上的介绍和总结,你可以全面了解在 Mac 开发中如何使用内置对话框和面板,希望这些内容对你的开发工作有所帮助。
超级会员免费看
1696

被折叠的 条评论
为什么被折叠?



