当前位置: 首页 > 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 <&…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...