26、Mac 开发中内置对话框和面板的使用指南

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. 创建并显示对话框的步骤
  1. 打开之前修改过的 MyTest 程序。
  2. 双击 Resources 文件夹中的 MainMenu.xib 文件,打开 Interface Builder 并显示用户界面窗口。
  3. 删除当前用户界面上显示的所有项目。
  4. 将一个 Push Button 对象拖放到用户界面窗口上。
  5. 点击 Classes 文件夹中的 MyTestAppDelegate.h 文件,并修改代码如下:
#import <Cocoa/Cocoa.h>

@interface MyTestAppDelegate : NSObject <NSApplicationDelegate> {
    NSWindow *window;
}

@property (retain) IBOutlet NSWindow *window;

-(IBAction) displayDialog:(id)sender;

@end
  1. 选择“File ➤ Save”或按 Command + S 保存更改。
  2. 点击 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
  1. 选择“File ➤ Save”或按 Command + S 保存更改。
  2. 再次双击 Resources 文件夹中的 MainMenu.xib 文件。
  3. 右键点击 MainMenu.xib 窗口中的“My Test App Delegate”图标,弹出一个提示窗口。
  4. 点击“Received Actions”标题下 displayDialog 右侧的圆圈,然后将鼠标拖动到用户界面上的按钮上。
  5. 选择“File ➤ Save”或按 Command + S 保存更改。
  6. 切换到 Xcode,点击“Build and Run”按钮或选择“Build ➤ Build and Run”。若代码无误,将弹出一个空白窗口。
  7. 点击按钮,对话框将出现。
  8. 点击“OK”按钮,对话框消失。
  9. 重复步骤 14 和 15,但这次点击“Cancel”按钮。
  10. 退出程序。
  11. 选择“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. 创建并显示打开面板的步骤
  1. 打开之前修改过的 MyTest 程序。
  2. 双击 Resources 文件夹中的 MainMenu.xib 文件,打开 Interface Builder 并显示用户界面窗口。
  3. 删除当前用户界面上显示的所有项目。
  4. 将一个 Push Button 对象拖放到用户界面窗口上。
  5. 点击 Classes 文件夹中的 MyTestAppDelegate.h 文件,并修改代码如下:
#import <Cocoa/Cocoa.h>

@interface MyTestAppDelegate : NSObject <NSApplicationDelegate> {
    NSWindow *window;
}

@property (retain) IBOutlet NSWindow *window;

-(IBAction) displayPanel:(id)sender;

@end
  1. 选择“File ➤ Save”或按 Command + S 保存更改。
  2. 点击 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
  1. 选择“File ➤ Save”或按 Command + S 保存更改。
  2. 双击 Resources 文件夹中的 MainMenu.xib 文件,打开 Interface Builder。
  3. 点击 MainMenu.xib 窗口中的“Window (My Test)”图标,显示用户界面窗口。
  4. 右键点击“My Test App Delegate”图标,弹出一个提示窗口。
  5. 点击“Received Actions”类别下 displayPanel 右侧的圆圈,将其拖动到用户界面上的按钮上。
  6. 选择“File ➤ Save”或按 Command + S 保存更改。
  7. 切换到 Xcode,点击“Build and Run”按钮或选择“Build ➤ Build and Run”。若代码无误,将弹出一个空白窗口。
  8. 点击按钮,打开面板将出现。
  9. 选择一个文件(可根据需要打开不同的文件夹),然后点击“Open”按钮。
  10. 退出程序。
  11. 选择“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. 限制文件类型并允许多文件选择的步骤
  1. 打开之前修改过的 MyTest 程序。
  2. 双击 Resources 文件夹中的 MainMenu.xib 文件,打开 Interface Builder 并显示用户界面窗口。确保用户界面上有一个按钮,若没有则删除当前显示的项目并拖放一个 Push Button 对象。
  3. 点击 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
  1. 选择“File ➤ Save”或按 Command + S 保存更改。
  2. 双击 Resources 文件夹中的 MainMenu.xib 文件,打开 Interface Builder。
  3. 右键点击 MainMenu.xib 窗口中的“My Test App Delegate”图标,确保 displayPanel 方法已连接到用户界面上的按钮。若未连接,点击“Received Actions”类别下 displayPanel 右侧的圆圈,将其拖动到按钮上。
  4. 选择“File ➤ Save”或按 Command + S 保存更改。
  5. 切换到 Xcode,点击“Build and Run”按钮或选择“Build ➤ Build and Run”。若代码无误,将弹出一个空白窗口。
  6. 点击按钮,打开面板将出现。
  7. 按住 Command 键并点击两个或更多文件,然后点击“Open”按钮。
  8. 退出程序。
  9. 选择“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. 创建并使用保存面板的步骤
  1. 打开之前修改过的 MyTest 程序。
  2. 双击 Resources 文件夹中的 MainMenu.xib 文件,打开 Interface Builder 并显示用户界面窗口。确保用户界面上有一个按钮,若没有则删除当前显示的项目并拖放一个 Push Button 对象。
  3. 点击 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
  1. 选择“File ➤ Save”或按 Command + S 保存更改。
  2. 切换到 Xcode,点击“Build and Run”按钮或选择“Build ➤ Build and Run”。若代码无误,将弹出一个空白窗口。
  3. 点击按钮,保存面板将出现。
  4. 点击“Save As”文本字段并输入一个文件名,如“My Files”。
  5. 退出程序。
  6. 选择“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 开发中如何使用内置对话框和面板,希望这些内容对你的开发工作有所帮助。

## 软件功能详细介绍 1. **文本片段管理**:可以添加、编辑、删除常用文本片段,方便快速调用 2. **分组管理**:支持创建多个分组,不同类型的文本片段可以分类存储 3. **热键绑定**:为每个文本片段绑定自定义热键,实现一键粘贴 4. **窗口置顶**:支持窗口置顶功能,方便在其他应用程序上直接使用 5. **自动隐藏**:可以设置自动隐藏,减少桌面占用空间 6. **数据持久化**:所有配置文本片段会自动保存,下次启动时自动加载 ## 软件使用技巧说明 1. **快速添加文本**:在文本输入框中输入内容后,点击"添加内容"按钮即可快速添加 2. **批量管理**:可以同时编辑多个文本片段,提高管理效率 3. **热键冲突处理**:如果设置的热键与系统或其他软件冲突,会自动提示 4. **分组切换**:使用分组按钮可以快速切换不同类别的文本片段 5. **文本格式化**:支持在文本片段中使用换行符制表符等格式 ## 软件操作方法指南 1. **启动软件**:双击"大飞哥软件自习室——快捷粘贴工具.exe"文件即可启动 2. **添加文本片段**: - 在主界面的文本输入框中输入要保存的内容 - 点击"添加内容"按钮 - 在弹出的对话框中设置热键分组 - 点击"确定"保存 3. **使用热键粘贴**: - 确保软件处于运行状态 - 在需要粘贴的位置按下设置的热键 - 文本片段会自动粘贴到当前位置 4. **编辑文本片段**: - 选中要编辑的文本片段 - 点击"编辑"按钮 - 修改内容或热键设置 - 点击"确定"保存修改 5. **删除文本片段**: - 选中要删除的文本片段 - 点击"删除"按钮 - 在确认对话框中点击"确定"即可删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值