热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

第十五章:使用AlertPanels

有时候,我们可能想要通过一个AlertPanel来给用户一些警告信息.Alertpanel很容易生成,在cocoa中,大部分的东西都是面向对象的,不过显示一个alertpanel却

有时候,我们可能想要通过一个Alert Panel来给用户一些警告信息. Alert panel很容易生成,在cocoa中,大部分的东西都是面向对象的,不过显示一个alert panel却是通过一个C函数来实现: NSRunAlertPanel() . 下面是函数声明:
int NSRunAlertPanel(NSString *title, NSString *msg,
       NSString *defaultButton, NSString *alternateButton,
       NSString *otherButton, ...);

下面的代码可以生成图15.1的Alert panel
int choice = NSRunAlertPanel(@"Fido", @"Rover",
                             @"Rex", @"Spot", @"Fluffy");

注意到panel上的icon就是程序的icon.第二个和第三个button是可选的. 使用nil参数来代替标题,button就不会显示出来

函数NSRunAlertPanel()会返回一个int值来指示用户点击了那个button. 这个值会是全局常量中的一个: NSAlertDefaultReturn, NSAlertAlternateReturn, 和NSAlertOtherReturn.

NSRunAlertPanel()函数有多个参数输入, 其中第二个参数是一个string,和printf一些可以使用一些代替符号. 从otherButton参数后面开始提供的参数值就是提供给第二个参数的值.所以以下代码显示图15.2 Alert panel
int choice = NSRunAlertPanel(@"Fido", @"Rover is %d",
                             @"Rex", @"Spot", nil, 8);

Alert panel运行在 modally模式. 在alert panel退出消失前,程序中的其他windows将不会接受到任何的事件.

Alert也可以运行在sheet模式.sheet是莫个window上下拉出来的一个window. 在sheet消失前,它关联的那个window接受不到任何按键和鼠标事件


-- 让用户确认删除 --

当用户点击Delete button, 在删除记录前,将会以一个sheet方式弹出一个Alert panel如图15.3


为了实现这个功能,首先打开MyDocument.nib,选择table view,打开Inspector. 设置容许用户多选.如图15.4

接下来,我们设置Delete button发送一个消息给MyDocument来让用户确认删除动作.如果用户确认要删除,那么MyDocument将发送removeEmployee:消息给array controller来删除所选择的Person

在XCode中, 打开MyDocument.h文件,添加Delete button将要触发的方法
- (IBAction)removeEmployee:(id)sender;

在MyDocument.m中实现removeEmployeeL方法. 我们将会先实现一个sheet alert
- (IBAction)removeEmployee:(id)sender
{
   NSArray *selectedPeople = [employeeController selectedObjects];
   NSAlert *alert = [NSAlert alertWithMessageText:@"Delete?"
            defaultButton:@"Delete"
          alternateButton:@"Cancel"
              otherButton:nil
informativeTextWithFormat:@"Do you really want to delete %d people?",
                            [selectedPeople count]];
   NSLog(@"Starting alert sheet");
   [alert beginSheetModalForWindow:[tableView window]
                     modalDelegate:self
                    didEndSelector:@selector(alertEnded:code:context:)
                       contextInfo:NULL];
}

这个方法会生成一个sheet,当用户点击sheet alert中的一个button,将会给document对象发送 alerEnded:code:context:消息 [为什么会给document 对象发送该消息呢?那是因为我们在beginSheetModalForWindow方法中将modalDelegate参数设置为了self]
- (void)alertEnded:(NSAlert *)alert
              code:(int)choice
           context:(void *)v
{
    NSLog(@"Alert sheet ended");
    // If the user chose "Delete", tell the array controller to
    // delete the people
    if (choice == NSAlertDefaultReturn) {
        // The argument to remove: is ignored
        // The array controller will delete the selected objects
        [employeeController remove:nil];
    }
}

打开MyDocument.nib. Control-drag Delete button到File's Owner.让File's Owner成为新的target [MyDocument.nib file''s Owner占位符,将就是设置成MyDocument对象了]. 设置action为removeEmployee: 如图15.5


编译运行程序.


-- 挑战 --
给Alert sheet添加另外一个button: Keep. 当点击这个button时,将会把所选的employees的raises设置为0.

转:https://www.cnblogs.com/pengyingh/articles/2350621.html



推荐阅读
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 在Ubuntu系统中配置Python环境变量是确保项目顺利运行的关键步骤。本文介绍了如何将Windows上的Django项目迁移到Ubuntu,并解决因虚拟环境导致的模块缺失问题。通过详细的操作指南,帮助读者正确配置虚拟环境,确保所有第三方库都能被正确识别和使用。此外,还提供了一些实用的技巧,如如何检查环境变量配置是否正确,以及如何在多个虚拟环境之间切换。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • 本文详细介绍了批处理技术的基本概念及其在实际应用中的重要性。首先,对简单的批处理内部命令进行了概述,重点讲解了Echo命令的功能,包括如何打开或关闭回显功能以及显示消息。如果没有指定任何参数,Echo命令会显示当前的回显设置。此外,文章还探讨了批处理技术在自动化任务执行、系统管理等领域的广泛应用,为读者提供了丰富的实践案例和技术指导。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • C#编程中按钮控件的使用与优化 ... [详细]
author-avatar
huangjia6688_862
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有