当前位置: 首页 > news >正文

【Swift】 NSButton的用法和示例

NSButton是macOS开发中常用的控件,用于创建按钮。它有许多用法和需要注意的事项,下面介绍其中的一些。

1. 创建按钮:使用init(frame:)或init(title:action:)初始化按钮

let button = NSButton(frame: NSRect(x: 0, y: 0, width: 100, height: 40))
let button = NSButton(title: "Click me", target: self, action: #selector(buttonClicked(_:)))

2. 设置按钮类型:使用setButtonType(_:)方法设置按钮类型,例如圆形、方形等

button.setButtonType(.pushOnPushOff) // 圆形开关按钮
button.setButtonType(.momentaryChange) // 短暂变化按钮

3. 设置标题:使用setTitle(_:), setAttributedTitle(_:)或setTitleWithMnemonic(_:)方法设置按钮标题

button.setTitle("OK")
let attributes: [NSAttributedString.Key: Any] = [.foregroundColor: NSColor.red]
button.setAttributedTitle(NSAttributedString(string: "Cancel", attributes: attributes))

4. 禁用按钮:使用setEnabled(_:)方法禁用按钮,禁用后按钮会显示为灰色

button.isEnabled = false

5. 按钮动作:使用setAction(_:)和setTarget(_:)方法来设置按钮点击后执行的方法和对象

button.target = self
button.action = #selector(buttonClicked(_:))@objc func buttonClicked(_ sender: NSButton) {print("Button clicked!")
}

6. 设置图片:使用setImage(_:)和setAlternateImage(_:)方法设置按钮的图像和替代图像

button.image = NSImage(named: "Icon")
button.alternateImage = NSImage(named: "Icon_selected")

7. 设置按钮状态:使用setState(_:)方法设置按钮的状态,可以是正常、选中或混合状态

button.state = .on // 充当开关按钮使用,设置按钮为选中状态

8. 设置键盘快捷键:使用setKeyEquivalent(_:), setKeyEquivalentModifierMask(_:)和performKeyEquivalent(_:)方法来设置按钮的键盘快捷键

button.keyEquivalent = "\r" // 回车键
button.keyEquivalentModifierMask = [.command, .shift] // 快捷键修饰符,同时按下 Command 和 Shift 键触发

NSButton的背景颜色和字体大小可以通过设置按钮的cell属性来实现。具体操作方法如下:

9. 设置背景颜色

要设置NSButton的背景颜色,需要创建一个NSButtonCell对象,并设置其backgroundColor属性。然后将该NSButtonCell对象赋值给NSButton的cell属性即可。

let button = NSButton(frame: NSRect(x: 0, y: 0, width: 100, height: 40))
let cell = button.cell as! NSButtonCell
cell.backgroundColor = .red

10. 设置字体大小

要设置NSButton的字体大小,同样需要创建一个NSButtonCell对象,并设置其font属性。然后将该NSButtonCell对象赋值给NSButton的cell属性即可。

let button = NSButton(frame: NSRect(x: 0, y: 0, width: 100, height: 40))
let cell = button.cell as! NSButtonCell
cell.font = NSFont.systemFont(ofSize: 20)

11. 更改形状

        (1)子类化NSButton并实现自定义形状。

          创建一个自定义的NSButton子类,并在其中覆盖draw(_ dirtyRect: NSRect)方法以绘制自定义形状。例如,一个绘制红色圆形的自定义NSButton子类CircleButton:

class CircleButton: NSButton {override func draw(_ dirtyRect: NSRect) {let path = NSBezierPath(ovalIn: bounds)NSColor.red.setFill()path.fill()}
}

        (2) 使用Core Animation图层和自定义形状

        使用Core Animation图层来创建自定义形状的按钮。可以使用CALayer的cornerRadius属性设置圆角,或者使用mask属性指定一个alpha通道图像来裁剪按钮的形状。例如,创建一个椭圆形的按钮:

let button = NSButton(frame: NSRect(x: 0, y: 0, width: 100, height: 50))
button.wantsLayer = true
button.layer?.cornerRadius = 25
button.layer?.backgroundColor = NSColor.red.cgColor

        在方法2中,我们将NSButton的wantsLayer属性设置为true,这将启用Core Animation图层。然后,我们设置按钮图层的cornerRadius属性为25,这将使按钮显示为椭圆形。最后,我们设置按钮图层的backgroundColor属性为红色,以使其显示为红色椭圆形。        

12. 需要注意的事项:

- 当使用setButtonType(.pushOnPushOff)设置按钮类型时,需要使用setPeriodicDelay(_:interval:)方法设置按钮重复点击延迟和重复点击间隔
- 如果使用init(title:action:)方法初始化按钮并指定了动作方法,则动作方法必须在目标对象中实现,并且接受一个参数:sender:NSButton
- 在设置按钮快捷键时,需要注意不要与其他快捷键冲突,否则会导致快捷键无法正常使用

相关文章:

【Swift】 NSButton的用法和示例

NSButton是macOS开发中常用的控件,用于创建按钮。它有许多用法和需要注意的事项,下面介绍其中的一些。 1. 创建按钮:使用init(frame:)或init(title:action:)初始化按钮 let button NSButton(frame: NSRect(x: 0, y: 0, width: 100, height…...

2023什么蓝牙耳机好?经销商盘点新手必入蓝牙耳机品牌

蓝牙耳机是除手机外我们使用频率最高的数码产品,我做蓝牙耳机经销商五年来,对各个品牌都有深入了解。近期看到很多新手们咨询什么蓝牙耳机好,我给大家盘点一下新手必看的五大蓝牙耳机品牌。 1.JEET Air 2蓝牙耳机 推荐理由:专为舒…...

MySQL基础(二十)MySQL的数据目录

1. MySQL8的主要目录结构 find / -name mysql1.1 数据库文件的存放路径 show variables like datadir; # /var/lib/mysql/1.2 相关命令目录 相关命令目录:/usr/bin 和/usr/sbin。 1.3 配置文件目录 配置文件目录:/usr/share/mysql-8.0(命…...

低代码行业未来如何?大家都真的看好低代码开发吗?

低代码行业未来如何?大家都真的看好低代码开发吗? 是否一定需要开发人员?低代码和无代码平台会取代传统编程吗?低代码/无代码真的是未来吗? 无疑是需要且重要的。今天就来解答为什么低/零代码工具越来越受欢迎&#xf…...

mac m2芯片 安装 brew 和cocoapods

Homebrew的安装 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 这里可能会失败,如 git clone 时候报错 error: RPC failed; curl 92 HTTP/2 stream 5 was not closed cleanly before end of the underlyi…...

SingleR --细胞注释

文章目录 briefExample使用内置的 references使用其他注释好的数据集作为 reference singleR还提供了注释诊断的方法 brief Example The celldex package provides access to several reference datasets (mostly derived from bulk RNA-seq or microarray data)。 The Human…...

【结构与算法】—— 游戏概率常用算法整理 | 游戏中的常见概率设计分析

📢博客主页:肩匣与橘📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由肩匣与橘编写,首发于CSDN🙉📢生活依旧是美好而又温柔的,你也是✨ …...

WebRTC系列-适配GPUImage及其他视频处理改造

文章目录 1. GPUImage 的一些改动1.1 GPUImage数据输入源1.1 GPUImage数据输出源2.WebRTC摄像头采集类改造GPUImage使用OpenGL提供了很多的图像处理算法,包括最常用的美颜处理、水印等功能,这些基本的功能如何添加到WebRTC中,本文以美颜为例子,叙述主要的改造流程;同时也适…...

day43—选择题

文章目录 1.A,B两台机器都正常工作,B机器未监听任何端口.如果A机器向B机器80端口发送SYN包,会收到何种类型的回包(D)2.下列哪个IP地址可以分配给一台计算机(D)3.以下哪个ip不和10.11.12.91/28处于同一个子网(D&#xf…...

<<和>>操作符、取地址重载、const关键字

文章目录 自定义类型<<和>>重载const关键字取地址重载&#xff08;类的默认构造函数&#xff09; 自定义类型<<和>>重载 在内置类型中&#xff0c;<<和>>可以自动识别 在自定义类型冲&#xff0c;运算符重载&#xff0c;<<和>&…...

数学模型,如何计算概率?

既然是数学模型,那应该如何计算呢? 最简单的方法,当然就是用统计学的方法去计算了,简单说来,就是靠输入的上下文进行统计,计算出后续词语的概率,比如「你吃了晚饭了吗」,「你吃了」后面按照概率,名词如「饭」或「晚饭」等概率更高,而不太可能是动词,如「睡」「睡觉…...

【Ehcache技术专题】「入门到精通」带你一起从零基础进行分析和开发Ehcache框架的实战指南(Spring整合ehcache)

带你一起从零基础进行分析和开发Ehcache框架的实战指南&#xff08;Spring整合ehcache&#xff09; 回顾一下Ehcache主要的特性 Spring框架所支持的第三方缓存Spring Cache的实现方式Spring Cache基本准备工作定义Ehcache配置文件启用Spring-CacheXML风格的xml代码 JavaConfig注…...

合肥市2023年度高校毕业生“双千培养工程”培训项目学员招募公告

为贯彻落实人社部实施促进高校毕业生等青年就业创业推进计划要求&#xff0c;提升高校毕业生就业技能&#xff0c;拟开展高校毕业生“双千培养工程”培训项目。根据工作计划安排&#xff0c;现面向高校和社会招募学员参加培训&#xff0c;培训方向为大数据应用、PythonAI人工智…...

重写Properties类,实现对properties文件的有序读写,数据追加,解决中文乱码

前言 *.properties文件&#xff0c;是 Java 支持的一种配置文件类型&#xff0c;并且 Java 提供了 properties 类来读取 properties 文件中的信息。文件中以键值对 "键值"的形式&#xff0c;存储工程中会多次重复使用的配置信息&#xff0c;通过“Properties”类来读…...

态势感知与信质、信量

未来的新智能是人机环境系统智能&#xff0c;而人机融合的态势感知是其关键&#xff0c;简单地说&#xff0c;态势感知&#xff08;situation awareness&#xff09;就是智能体在“一定时间和空间环境中的元素的感知&#xff0c;对它们的含义的理解&#xff0c;并对他们稍后状态…...

20230508----重返学习-call()与bind()重写-JS中数据类型检测汇总-装箱与拆箱-类的多种继承方案

day-065-sixty-five-20230508-call()与bind()重写-JS中数据类型检测汇总-装箱与拆箱-类的多种继承方案 call()与bind()重写 call()重写 call()的作用例子 let obj {name: 珠峰培训 } const fn function fn(x, y, ev) {console.log(this, x, y, ev)return x y } let res f…...

Node.js对ES6 及更高版本的支持

目录 1、简介 2、默认情况下什么特性随着 Node.js 一起发布&#xff1f; 3、有哪些特性在开发中&#xff1f; 4、移除这个标记&#xff08;--harmony&#xff09;吗 5、Node.js 对应 V8 引擎 1、简介 Node.js 是针对 V8 引擎构建的。通过与此引擎的最新版本保持同步&…...

【华为OD机试2023】工作安排 100% C++ Java Python

【华为OD机试2023】工作安排 100% C++ Java Python 前言 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解法非最优解(即非性能最优),不能保证通过率。 Tips1:机试为ACM 模式 你的代码需要处理输入输出,input/cin接收…...

面试题Spring - 关于Spring的25个经典问题和答案

文章目录 1 什么是Spring框架&#xff1f;Spring框架有哪些主要模块&#xff1f;2 使用Spring框架能带来哪些好处&#xff1f;3 什么是控制反转(IOC)&#xff1f;什么是依赖注入&#xff1f;4 请解释下Spring框架中的IoC&#xff1f;5 BeanFactory和ApplicationContext有什么区…...

C++学习day--10 条件判断、分支

1、if语句 if 语句的三种形态 形态1&#xff1a;如果。。。那么。。。 #include <iostream> using namespace std; int main( void ) { int salary; cout << " 你月薪多少 ?" ; cin >> salary; if (salary < 20000) { cout <&…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...