NSAlert组件应用总结 原

NSAlert组件应用总结

一、引言

    在桌面软件开发中,当用户进行非法的操作或有风险的操作时,时长需要弹出警告框来提示用户。在OS X系统上,NSAlert是专门的警告框组件。其提供了简洁的接口供开发者进行使用。

二、NSAlert的简单使用

    使用警告框最简单的使用方式是提示错误信息,错误信息警告只起到提示用户的作用,其只有一个OK按钮,点击后警告框会关闭。示例如下:

- (IBAction)alert:(id)sender {
    NSError * error = [NSError errorWithDomain:@"testError" code:1001 userInfo:@{@"userid":@"1000"}];
    NSAlert * alert = [NSAlert alertWithError:error];
    [alert runModal];
}

效果图如下:

警告框的展现有两种方式,分别为模态窗与弹出抽屉。弹出抽屉会显示在当前绑定的窗口上,模态窗则会自成窗口,弹出在屏幕中央。

    你也可以对警告框进行自定义设置,例如文本,标题,图标等,示例如下:

- (IBAction)alert:(id)sender {
    NSAlert * alert = [[NSAlert alloc]init];
    alert.icon = [NSImage imageNamed:@"icon"];
    alert.messageText = @"警告信息";
    alert.informativeText = @"额外提供的内容";
    alert.showsHelp = YES;
    alert.helpAnchor = @"mac";
    alert.alertStyle = NSAlertStyleInformational;
    alert.showsSuppressionButton = YES;
    [alert.suppressionButton setTarget:self];
    [alert.suppressionButton setAction:@selector(click)];
    [alert addButtonWithTitle:@"1"];
    [alert addButtonWithTitle:@"2"];
    [alert addButtonWithTitle:@"3"];
    [alert addButtonWithTitle:@"4"];
    long res =  [alert runModal];
    NSLog(@"%ld",res);
}

效果如下:

三、NSAlert属性与方法解析

NSAlert类中的属性和方法解析如下:

//直接使用错误信息创建警告框
+ (NSAlert *)alertWithError:(NSError *)error;
//设置警告框信息
@property (copy) NSString *messageText;
//设置额外信息内容
@property (copy) NSString *informativeText;
//设置警告框图标
@property (null_resettable, strong) NSImage *icon;
//向警告框中添加按钮
- (NSButton *)addButtonWithTitle:(NSString *)title;
//按钮数组
@property (readonly, copy) NSArray<NSButton *> *buttons;
//是否显示帮助按钮
@property BOOL showsHelp;
//设置帮助手册锚点 用于定于
@property (nullable, copy) NSString *helpAnchor;
//设置警告框风格
/*
typedef NS_ENUM(NSUInteger, NSAlertStyle) {
    NSAlertStyleWarning = 0,     //警告风格
    NSAlertStyleInformational = 1,//提示信息风格
    NSAlertStyleCritical = 2    //验证风格
};
*/
@property NSAlertStyle alertStyle;
//是否显示不再提示按钮
@property BOOL showsSuppressionButton NS_AVAILABLE_MAC(10_5);
//获取不再提示按钮
@property (nullable, readonly, strong) NSButton *suppressionButton NS_AVAILABLE_MAC(10_5);
//代理对象
@property (nullable, weak) id<NSAlertDelegate> delegate;
//以模态窗口的方式弹出警告框,这个方法是同步的,当用户点击警告框中按钮后会返回,返回的NSModalResponse实际上是
//整型数据,第1个按钮为1000,后面一次递增,如1001,1002...
- (NSModalResponse)runModal;
//以窗口抽屉的方式弹出警告框,这个方法是异步的,当用户点击警告框中的按钮后会回调block
- (void)beginSheetModalForWindow:(NSWindow *)sheetWindow completionHandler:(void (^ __nullable)(NSModalResponse returnCode))handler NS_AVAILABLE_MAC(10_9);

NSAlertDelegate协议中只定义了一个方法,如下:

@protocol NSAlertDelegate <NSObject>
@optional
//当用户点击帮助按钮后回调的方法 返回值决定是否弹出帮助窗口
- (BOOL)alertShowHelp:(NSAlert *)alert;
@end

除了上面列出的方法外,NSAlert中还有两个已经弃用的便捷构造和弹出方法,如下:

//创建警告框
+ (NSAlert *)alertWithMessageText:(nullable NSString *)message defaultButton:(nullable NSString *)defaultButton alternateButton:(nullable NSString *)alternateButton otherButton:(nullable NSString *)otherButton informativeTextWithFormat:(NSString *)format, ...;
//弹出警告框
- (void)beginSheetModalForWindow:(NSWindow *)window modalDelegate:(nullable id)delegate didEndSelector:(nullable SEL)didEndSelector contextInfo:(nullable void *)contextInfo;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏向治洪

react-native添加redux支持

redux简介 redux是一个用于管理js应用状态的容器。redux出现时间并不是很长,在它出现之前也有类似功能的模块出现,诸如flux等等。redux设计的...

31490
来自专栏落影的专栏

iOS开发笔记(三)

前言 日常开发遇到的问题记录。 JSON Invalid type in JSON write (NSConcreteMutableData) 合法的j...

59350
来自专栏编程之旅

iOS开发——多线程完成短信获取按钮倒计时

现在的APP应用中,用手机获取短信验证码是非常常见的一个功能,而往往要求的效果就是在按下获取验证码之后,验证码的按钮开始倒计时,例如30秒后重新获取。而我们如何...

15840
来自专栏iOS技术杂谈

NSNotificationCenter 通知的使用方法详解你要知道的KVC、KVO、Delegate、Notification都在这里

你要知道的KVC、KVO、Delegate、Notification都在这里 转载请注明出处 https://cloud.tencent.com/develop...

50960
来自专栏青青天空树

nodejs构建多房间简易聊天室

  本服务器需要提供两个功能:http服务和websocket服务,由于node的事件驱动机制,可将两种服务搭建在同一个端口下。

33510
来自专栏Web 开发

给iOS的WebView添加远程调试

定位到 didFinishLaunchingWithOptions 代码块中。

9400
来自专栏ionic3+

Cordova插件使用——Statusbar定制状态栏

因为应用标题栏背景有底色,而默认状态栏的文字颜色为黑色,看上去就没那么美观,所以我们可以去利用该插件改变状态栏的文字为协调的颜色。

10430
来自专栏君赏技术博客

UIBarButtonItem我用了这些姿势才能和你交互

因为系统是没有方式可以获取到 Done 按钮的,我们运用运行时倒是可以获取到这个按钮。

25950
来自专栏每日一篇技术文章

weex-31-接入iOS完整步骤

由于WeexSDK 中没有图片下载功能,所以需要我们自己定义,其实也比较简单,创建一个类 实现两个协议即可

19110
来自专栏iOS122-移动混合开发研究院

FXForms,自动生成iOS表单

1.简介 FXForms是一个简单的表单提交框架,他的作者是鼎鼎大名的 Nick Lockwood,你也许听说过他的其他的一些框架,比如 iCarousel. ...

30300

扫码关注云+社区

领取腾讯云代金券