[MacOS NSAlert的使用]
源:http://helloitworks.com/863.html
NSAlert用于弹出一个确认对话框,在程序中被广泛地使用。常见的场景是用户删除数据,会弹出对话框给用户确认,免得用户不小心导致了误操作。
NSAlert可以采用Modal Window的方式展示
如图:
代码如下:
- //采用Modal Window的方式展示
- - (IBAction)ShowNSAlertWindow:(id)sender
- {
- NSAlert *alert = [NSAlert alertWithMessageText:@"messageText"
- defaultButton:@"defaultButton"
- alternateButton:@"alternateButton"
- otherButton:@"otherButton"
- informativeTextWithFormat:@"informativeText"];
- NSUInteger action = [alert runModal];
- //响应window的按钮事件
- if(action == NSAlertDefaultReturn)
- {
- NSLog(@"defaultButton clicked!");
- }
- else if(action == NSAlertAlternateReturn )
- {
- NSLog(@"alternateButton clicked!");
- }
- else if(action == NSAlertOtherReturn)
- {
- NSLog(@"otherButton clicked!");
- }
- }
NSAlert也可以采用Sheet的方式展示
如图:
代码如下:
- //采用Sheet的方式展示
- - (IBAction)ShowNSAlertSheet:(id)sender
- {
- NSMutableDictionary * extrasDict = [[NSMutableDictionary alloc] init];
- [extrasDict setObject:@"http://www.baidu.com" forKey:@"link"];
- NSAlert *alert = [NSAlert alertWithMessageText:@"messageText"
- defaultButton:@"defaultButton"
- alternateButton:@"alternateButton"
- otherButton:@"otherButton"
- informativeTextWithFormat:@"informativeText"];
- //__bridge_retained for arc
- [alert beginSheetModalForWindow:self.window
- modalDelegate:self
- didEndSelector:@selector(alertSheetDidEnd:returnCode:contextInfo:)
- contextInfo:(__bridge void *)(extrasDict )];
- }
- //响应Sheet的按钮事件
- - (void)alertSheetDidEnd:(NSAlert *)alert returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
- {
- if (returnCode == NSAlertDefaultReturn)
- {
- NSLog(@"alternateButton clicked!");
- //show you how to use contextInfo
- //__bridge_transfer for arc
- NSString *url = [(__bridge NSDictionary*)contextInfo objectForKey:@"link"];
- [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:url]];
- }
- else if(returnCode == NSAlertAlternateReturn )
- {
- NSLog(@"alternateButton clicked!");
- }
- else if(returnCode == NSAlertOtherReturn)
- {
- NSLog(@"otherButton clicked!");
- }
- }
源代码:https://github.com/helloitworks/NSAlert
=====================华丽的分割线=====================
可以说NSAlert是标准的,中规中矩,几乎可以应用到所有需要提示框的地方。但我们很难通过继承的方式来扩展NSAlert的功能,事实上NSAlert的设计初衷就是提供一个提示框标准,并不希望用户通过继承去自定义。
在特定的应用程序中,我们经常希望可以自己提供一个自定义窗口,并可以像NSAlert那样采用Modal Window的方式或者采用Sheet的方式来展示。比如黑色主题的程序希望这个NSAlert窗口是黑色的,而不是标准的灰白色,这样才显得和谐。
下面我通过继承NSObject的方式来实现一个SYXAlert类,SYXAlert类采用一个自定义的窗口SYXAlert来模拟NSAlert。
SYXAlert可以采用Modal Window的方式展示
如图:
代码如下:
- //采用Window的方式展示
- - (IBAction)ShowSYXAlertWindow:(id)sender
- {
- SYXAlert *alert = [SYXAlert alertWithMessageText:@"SYXAlertWindow" okButton:@"Ok" cancelButton:@"Cancel"];
- NSInteger action = [alert runModal];
- if(action == SYXAlertOkReturn)
- {
- NSLog(@"SYXAlertOkButton clicked!");
- }
- else if(action == SYXAlertCancelReturn )
- {
- NSLog(@"SYXAlertCancelButton clicked!");
- }
- }
注:modal对话框窗口左上角是没有Close、Minimize、Resize这些按钮的,所以在xib中去掉这些按钮
SYXAlert也可以采用Sheet的方式展示
如图:
代码如下:
- //采用Sheet的方式展示
- - (IBAction)ShowSYXAlertSheet:(id)sender
- {
- NSMutableDictionary * extrasDict = [[NSMutableDictionary alloc] init];
- [extrasDict setObject:@"http://www.baidu.com" forKey:@"link"];
- SYXAlert *alert = [SYXAlert alertWithMessageText:@"SYXAlertSheet" okButton:@"Ok" cancelButton:@"Cancel"];
- [alert beginSheetModalForWindow:self.window
- modalDelegate:self
- didEndSelector:@selector(alertSheetDidEnd:returnCode:contextInfo:)
- contextInfo:(__bridge void*)extrasDict];
- }
- //响应Sheet的按钮事件
- - (void)alertSheetDidEnd:(NSAlert *)alert
- returnCode:(NSInteger)returnCode
- contextInfo:(void *)contextInfo {
- if (returnCode == SYXAlertOkReturn)
- {
- NSLog(@"SYXAlertOkButton clicked!");
- //show you how to use contextInfo
- //__bridge_transfer for arc
- NSString *url = [(__bridge NSDictionary*)contextInfo objectForKey:@"link"];
- [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:url]];
- }
- else if(returnCode == SYXAlertCancelReturn )
- {
- NSLog(@"SYXAlertCancelButton clicked!");
- }
- }
注:xib的window属性有一个选项,就是visible at launch,默认是勾选,窗口无法采用sheet的方式附在父窗口上;勾掉,窗口才能采用sheet的方式附在父窗口上
源代码:https://github.com/helloitworks/SYXAlert
[MacOS NSAlert的使用]的更多相关文章
- MacOS微信逆向分析-Frida
MacOS微信逆向分析-Frida 0.前言 PC下的微信二次开发相信大家都会了,那么本篇文章将带领大家使用Frida框架对Mac下微信来进行二次开发! PS:还有一种静态注入的方式也不错,但是考虑到 ...
- TODO:macOS编译PHP7.1
TODO:macOS编译PHP7.1 本文主要介绍在macOS上编译PHP7.1,有兴趣的朋友可以去尝试一下. 1.下载PHP7.1源码,建议到PHP官网下载纯净到源码包php-7.1.0.tar.g ...
- TODO:macOS上ThinkPHP5和Semantic-UI集成
TODO:macOS上ThinkPHP5和Semantic-UI集成 1. 全局安装 (on OSX via homebrew)Composer 是 homebrew-php 项目的一部分 2. 把X ...
- CoreCRM 开发实录——Travis-CI 实现 .NET Core 程度在 macOS 上的构建和测试 [无水干货]
上一篇文章我提到:为了使用"国货",我把 Linux 上的构建和测试委托给了 DaoCloud,而 Travis-CI 不能放着不用啊.还好,这货支持 macOS 系统.所以就把 ...
- docker4dotnet #3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用
.net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对岸的苹果园越来越茂盛,实在不想再去做一只宅猿了.于是,.net猿决定搭上小鲸鱼的渡轮到苹果园去看 ...
- ASP.NET Core 中文文档 第二章 指南(1)用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序
原文:Your First ASP.NET Core Application on a Mac Using Visual Studio Code 作者:Daniel Roth.Steve Smith ...
- Swift 3 and OpenGL on Linux and macOS with GLFW
https://solarianprogrammer.com/2016/11/19/swift-opengl-linux-macos-glfw/ Swift 3 and OpenGL on Linux ...
- Asp.Net Core 发布和部署( MacOS + Linux + Nginx )
前言 在上篇文章中,主要介绍了 Dotnet Core Run 命令,这篇文章主要是讲解如何在Linux中,对 Asp.Net Core 的程序进行发布和部署. 有关如何在 Jexus 中进行部署,请 ...
- 在MacOS 10.12上安装Tomcat8.5
在MacOS 10.12上安装Tomcat8.5 原文链接:https://wolfpaulus.com/journal/mac/tomcat8/ Context 已安装Java,使用java -ve ...
随机推荐
- DWZ中Tree树形菜单的treeCheck如何获取返回值解决方案
最近在对DWZ和asp.net MVC3进行整合,其中遇到了很多问题,总算一一解决了,今天就说说题目所示的问题解决方案. 想做一个基于角色的权限管理,要对每一个Action进行权限控制.就想用DWZ的 ...
- JavaScript系列:计算一个结果为30的加法智力题
用下面这段JavaScript代码可以计算出来 function findTheThreeNum(numFix) { var a = ["1", "3", &q ...
- 漫谈 Java 实例化类
Java 中实例化类的动作,你是否还是一成不变 new 对应对象呢? 经手的项目多了,代码编写量自然会增加,渐渐的会对设计模式产生感觉. 怎样使书写出来的类实例化动作,高内聚,低耦合,又兼具一定的扩展 ...
- JSP 和 ASP.NET 谁能主宰未来【转】
随着计算机行业的发展,以后到底谁才是 web 网站开发的主宰者呢? 1. 说说JSP.(本人工作中用的最多的就是JSP) JSP. JavaServer Pages 是Java技术的一部分,可以说是J ...
- 读懂IL代码就这么简单(三)完结篇
一 前言 写了两篇关于IL指令相关的文章,分别把值类型与引用类型在 堆与栈上的操作区别详细的写了一遍 这第三篇也是最后一篇,之所以到第三篇就结束了,是因为以我现在的层次,能理解到的都写完了,而且个人认 ...
- 转载:ZooKeeper Programmer's Guide(中文翻译)
本文是为想要创建使用ZooKeeper协调服务优势的分布式应用的开发者准备的.本文包含理论信息和实践信息. 本指南的前四节对各种ZooKeeper概念进行较高层次的讨论.这些概念对于理解ZooKeep ...
- Matlab中的向量
1. 向量的创建 1)直接输入: 行向量:a=[1,2,3,4,5] 列向量:a=[1;2;3;4;5] 2)用“:”生成向量 a=J:K 生成的行向量是a=[J,J+1,…, ...
- Ubuntu修改文件关联
* 在system setting>details中可以设置一部分文件关联,很弱很破. * 右键open with只能临时选择打开方式,并且可选的打开方式十分有限.如果是自己编的程序,在列表中没 ...
- struts 2.3.14.1 包详解
1.struts2-convention-plugin-2.3.14.1.jar: @ParentPackage(default-package) @Namespace("/") ...
- equals()的用法
比如,两个对象 c1, c2; 那么,c1.equals(c2) == true; 则表示c1, c2两个变量的值是一致的 equals适用于所有对象,这是一种特殊方法 equals这种表现形式我们一 ...