首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在NSTableVIew中作为复选框的NSButtonCell不会被选中

在NSTableView中作为复选框的NSButtonCell不会被选中是因为NSButtonCell默认不支持复选框功能。要实现复选框功能,需要自定义NSButtonCell并重写其相关方法。

首先,创建一个继承自NSButtonCell的子类,命名为CheckboxButtonCell。在CheckboxButtonCell类中,重写以下方法:

  1. drawInterior(withFrame:in:controlView:):用于绘制复选框按钮的外观。
  2. trackMouse(with:in:of:at:untilMouseUp:):用于处理鼠标点击事件,实现复选框的选中和取消选中功能。
  3. cellSize(forBounds:):用于设置复选框按钮的大小。

下面是CheckboxButtonCell类的示例代码:

代码语言:swift
复制
import Cocoa

class CheckboxButtonCell: NSButtonCell {
    override func drawInterior(withFrame cellFrame: NSRect, in controlView: NSView) {
        let buttonRect = NSRect(x: cellFrame.origin.x + 2, y: cellFrame.origin.y + 2, width: cellFrame.size.width - 4, height: cellFrame.size.height - 4)
        let buttonPath = NSBezierPath(rect: buttonRect)
        
        NSColor.white.setFill()
        buttonPath.fill()
        
        NSColor.black.setStroke()
        buttonPath.lineWidth = 1
        buttonPath.stroke()
        
        if self.state == .on {
            let checkmarkPath = NSBezierPath()
            checkmarkPath.move(to: NSPoint(x: buttonRect.origin.x + 4, y: buttonRect.origin.y + buttonRect.size.height / 2))
            checkmarkPath.line(to: NSPoint(x: buttonRect.origin.x + buttonRect.size.width / 2 - 2, y: buttonRect.origin.y + 4))
            checkmarkPath.line(to: NSPoint(x: buttonRect.origin.x + buttonRect.size.width - 4, y: buttonRect.origin.y + buttonRect.size.height - 4))
            
            NSColor.black.setStroke()
            checkmarkPath.lineWidth = 2
            checkmarkPath.stroke()
        }
    }
    
    override func trackMouse(with event: NSEvent, in cellFrame: NSRect, of controlView: NSView, untilMouseUp flag: Bool) -> Bool {
        if self.isEnabled {
            self.state = (self.state == .on) ? .off : .on
            controlView.needsDisplay = true
        }
        return true
    }
    
    override func cellSize(forBounds rect: NSRect) -> NSSize {
        return NSSize(width: 20, height: 20)
    }
}

接下来,在使用NSTableView的地方,将对应的列的Cell类型设置为CheckboxButtonCell。可以通过代码或者Interface Builder来实现。

代码语言:swift
复制
let checkboxColumn = NSTableColumn(identifier: NSUserInterfaceItemIdentifier("CheckboxColumn"))
checkboxColumn.headerCell.title = "Checkbox"
checkboxColumn.dataCell = CheckboxButtonCell()
tableView.addTableColumn(checkboxColumn)

现在,当在NSTableView中点击复选框按钮时,复选框将会被选中或取消选中,并且外观也会相应改变。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云对象存储(COS)。

  • 腾讯云云服务器(CVM):提供可扩展的计算能力,适用于各种规模的应用程序和业务场景。了解更多信息,请访问腾讯云云服务器产品介绍
  • 腾讯云对象存储(COS):提供安全、稳定、低成本的对象存储服务,适用于存储和管理大规模的非结构化数据。了解更多信息,请访问腾讯云对象存储产品介绍
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

macOS开发之NSTableView应用详解

NSTableView应用详解 一、引言     和iOS开发UITableView有很大差别,NSTableView并非是一个可滚动列表视图,其是一个不可滚动、支持多列多行原始列表视图。...二、构建一个简单列表视图     首先新建一个测试工程,ViewController.m文件编写如下代码: #import "ViewController.h" @interface ViewController...如果我们要对Cell渲染进行一些定制,可以如下方法实现: //将要渲染cell调用方法 开发者可以拿到cell对象做定制 - (void)tableView:(NSTableView *)tableView...,如果实现了这个方法,则TableView不会再从NSTableColumn对象拿Cell实例: //返回自定义Cell实例 /* 需要注意,这个方法第一次调用时候 tableColumu对象是...六、NSTableRowView解析     NSTableRowView用在View-BaseTableView,其作为行容器存在。

4.7K21

Jekyll-Admin-Mac 开发纪要-左侧菜单栏

Xcode6使用IBDesignable创建自定义控件(翻译) 关于如何 NSView自定义背景颜色参考下面的连接 我们设置 NSView为继承与 BaseView 背景颜色试图。...然而现在一个问题已经出现,现在这么多配置需要配置岂不是很麻烦。 这就涉及到面向对象思想,但是我们可以 Swift中使用 Struct作为我们配置数据源。...我们点击 NSTableView点击方法获取选中 Row,之后让选中数据源状态被选中,其他取消选中。...我们 SideMenuItemConfiguration新增默认颜色和选中颜色属性。...⚠️因为结构体没有引用,所以便利出来临时变量属于一个新地址。我们需要修改临时变量之后替换掉之前数组里面的。

2.1K10

一步一步,开始上手Mac 开发(一)

添加MasterViewController后界面 1.9 选中MasterViewController.xib,因为我们这个工程练习需要显示一些Bugs信息列表,所以需要一个table view,...Mac,这个控件叫做NSTableView(类似iOSUITableview)。...可能你已经意识到了,iOS你熟知许多UIKit控件,就是脱生于Mac OSX AppKit,只是把原来Mac OSXNS前缀改为UI前缀而已,因此,多数情况下,你iOS中经常用控件基本上...ARC) assign:基本数据类型(非对象类型)使用,不会触发内存管理问题(不会纳入到ARC) 1.17 使用同样步骤,我们再创建另一个数据模型ScaryBugsDoc,并编写代码,结果如下...OSXtable view 控件是NSTableView,它类似iOSUITableView,不同NSTableView一行(row)可以有很多列(column) 1.20 选中table

4K40

为什么Java成员变量不能重写?成员变量Java能够重写么?不会重写成员变量,而是隐藏成员变量访问隐藏域方法

这篇文章讨论了Java面向对象概念中一个基本概念--Field Hiding(成员变量隐藏) 成员变量Java能够重写么?...不会重写成员变量,而是隐藏成员变量 Java文档对隐藏域定义: Within a class, a field that has the same name as a field in the superclass...意思就是: 一个类,子类成员变量如果和父类成员变量同名,那么即使他们类型不一样,只要名字一样。父类成员变量都会被隐藏。子类,父类成员变量不能简单用引用来访问。...而是,必须从父类引用获得父类隐藏成员变量,一般来说,我们不推荐隐藏成员变量,因为这样会使代码变得难以阅读。...其实,简单来说,就是子类不会去重写覆盖父类成员变量,所以成员变量访问不能像方法一样使用多态去访问。

3.5K40

【译】W3C WAI-ARIA最佳实践 -- 表单

复选框 WAI-ARIA支持两种类型 checkbox: 双态: 最常见复选框类型,它允许用户两个状态间切换——选中、未选中. 三态: 这种类型复选框支持额外第三种状态 - 部分选中....如果该组所有选项都被选中,该三态复选框呈现整体状态为选中。 如果该组部分选项被选中,该三态复选框呈现整体状态为部分选中(partially checked)。...如果该组没有选项被选中,该三态复选框呈现整体状态为未选中。 用户仅使用一个操作,就可以改变三态复选框组中所有选项状态: 选中整体复选框,可以选中所有选项。...取消选中整体复选框,可以取消选中所有选项。 并且,某些实现,系统可能会记住上次选中选项,整体状态为部分选中。如果提供了此功能,第三次激活整体复选框会恢复选项组中部分被选中状态。...- (可选):当焦点位于未选中menuitemradio上时,不会关闭菜单,选中聚焦 menuitemradio,并取消选中同一组任何其他已选中 menuitemradio 元素。

8.2K30

SeleniumWebDriver处理复选框CheckBox和单选按钮RadioButton

在这里插入图片描述 复选框CheckBox 使用click()方法切换复选框状态:开/关。 如下代码是使用账户名和密码登陆百度网址,其中可见到下次自动登陆复选框。 ?...:" + memberPass.isSelected()); 其输出为:"是否选中:False" isSelected() 方法作用是:判断复选框是否勾选。...访问该页面时,该元素不在页面。...使用FireFoxFirepath或ChromeInspectElement(F12)检查定位元素; 检查代码中使用值与Firepath中元素值是否相同; 有些元素属性动态;如果发现值不同...使用隐式或显式等待,查找定位元素之前;等待详情请参考文章:Selenium三种等待 下表总结了访问上面讨论每种类型元素命令: Element 命令 描述 Check Box, Radio Button

3.4K10

前端问题汇总

-- 所有浏览器都支持一个css属性 --> opacity: 0.5; 如何通过选中文字来勾选/取消复选框 想要在选中文字时候就自动勾选或取消复选框,有两种实现方式: 方式一:复选框外边包上...如何屏蔽双击选中文本 IE浏览器可以通过某个标签里添加onselectstart="return false"来屏蔽双击选中文本,该属性火狐无效,火狐需要用style="-moz-user-select...此外还可以body里添加该属性来实现整个网页都无法选中文字。...,但它不会强制文本溢出,所以有时候会不生效。...参考链接 解决文档中有url链接时强制换行问题 JS文件中文在网页上显示为乱码 谈谈text-overflow那些坑和应对方法 警告 本文最后更新于 January 26, 2021,文中内容可能已过时

2.5K20

Jekyll-Admin-Mac-列表

C99F8039-E33D-47D0-98EA-459D0AF3E336 解决 NSTableView Header Xib无法正常显示 有的时候我们发现 NSTableView Xib隐藏了,...设置 ActionTableCellView按钮宽度都为 100。 我们给 DateTableCellView连接 label属性用于设置时间。...关于泛型参数 对于 泛型参数 OC和 Swift一直没有明白过来,也一直掌握精髓,到现在都不会用。 现在要封装请求,对于代理回调应该需要用上 泛型参数,研究一下。...参考资料: swift3.0@escaping 和 @noescape 含义。 看过资料我们可以知道,系统默认是 @noescape。...BaseListView作为列表基类,我们数据源结构可能不太一样,我们不可能让我们自定义数据源传入 BaseListView。 这个时候我们 泛型参数又可以登场了。

3.1K10

后台系统设计(上篇:选择)

二、复选框 允许用户从非互斥选项,选择任意数量选项(零个、一个或多个) 单个使用时,复选框提供了两个互斥(二元)操作选项。 外观 常规: ? ? 全选操作(未全选状态): ?...最佳用法 ·复选框用于表示状态标记,不会直接导致命令触发,需要最终和命令按钮(如提交、确定等)操作配合,若是直接触发请改用切换开关(切换开关并非绝对情况下都是直接触发命令操作);若复选选项过多时,且有限屏幕空间下...习惯用法是遵循互联网产品一些默认处理方式,例如,注册同意条款就是使用复选框。...但是如果源列表选项过多,又想让被选中选项更容易看到,穿梭框则是不错选择。 ?...如果需要指出所有项目都适用,例如,作为列表过滤器,请将「全部」 作为选项,并将其放置列表开头。 ? ·若下拉列表内容大于视窗高度,下拉列表高度为:N列表+½列表。 ?

9.6K21

Vue表单输入绑定

我们应该总是JavaScript脚本声明初始值,或者组件data选项声明初始值。 文本框输入数据,可以看到输入框下方内容也会同时发生改变。   ...,选中则值为true,未选中则值为false;后者绑定是同一个数组,选中复选框值将被保存到数组。...单选时,绑定是选项值(元素value属性值);多选时,绑定到一个数组,所有选中选项保存到数组。 <!...例如,单个复选框绑定是布尔值,多个复选框绑定是一个数组,选中复选框value属性保存到数组。   ...7.1 复选框   使用复选框时,元素上可以使用两个特殊属性true-value和false-value来指定选中状态下和未选中状态下v-model绑定值是什么。 <!

7.3K70

UI设计规范:单选按钮 vs 复选框,没那么简单

本文中我通过列举几个典型错误用法,帮助设计师进行UI/UX设计时,更加规范地使用单选按钮和复选框这两个组件。...换句话说,如果你选择了其中一个没有被选中选项,那么原本被选中选项就自动取消。 什么时候使用复选框? 有一系列选项,用户可以从中选择选择一个或多个,甚至不选也可以。...一个提供午餐外卖服务app, 让用户选择送餐时间时,使用了复选框组件。...以上几个例子是比较夸张,但的确反映了一些UI/UX设计存在问题。如果我们复选框选项中使用否定句式,用户必须浏览完所有的选项,才能确保自己不喜欢事情不会发生。...在所有选项都被清晰地列举出时,用户更容易进行比较,做出正确选择。 2. 使用单选按钮时,一定要提供一个已经选中默认选项。 3. 单选按钮和复选框都不用于触发任何动作。 4.

2K30

React技巧之检查复选框是否选中

,使用event对象上target.checked 属性,来检查复选框是否选中。...或者state变量存储checked值,或者访问不受控制复选框ref.current.checked 属性。...当我们需要基于当前state来计算下个state值时,这是非常有用。 ref 要检查一个不受控制复选框是否被选中,可以访问ref对象上current.checked属性。...该钩子返回一个可变ref对象,其.current属性初始化为传递参数。需要注意是,我们必须访问ref对象上current属性,来访问设置了ref属性复选框元素。...换句话说,它几乎是一个带有.current属性记忆化对象值。 你可以复选框元素上通过ref.current 访问任意属性。

1.4K10

初学者:html表单详解(下面附有代码)

表单标签form 声明数据采集范围,只要是form,都是要采集数据。 一个页面可以有多个form标签,只能是并列关系,不能嵌套。只能是兄弟关系,,不能是父子关系。...get方式:将数据作为url地址一部分发送给服务器:安全性较低,有长度限制:请求数据可以缓存,能够保存在浏览器历史记录作为书签收藏。...post方式:将数据隐藏在http数据流中进行传输:安全性比get方式要高, 对数据长度没有限制:请求数据不会被缓存,也不会在浏览器历史记录中保存,更不会作为书签收藏。...type**="checkbox"** name="hob"/>吃饭吃饭 **复选框** 普通按钮,既不会重置也不会提交...但是style样式中加入resize:none属性,样式就不会改变了。就设置成了禁止拖动文本框大小。 label表单标注标签,扩大点击范围。

1.4K20

如何判断php复选框是否被选中

复选框checkbox通常用于php表单提交。本文通过实例给大家介绍php如何判断复选框值是否被选中。需要它朋友可以参考本文中例子。...本文章向大家介绍两个知识点: 1.php表单提交如何获取复选框checkbox值 2.php如何判断复选框checkbox值是否被选中 下面我们分别对这两个知识点进行讲解: 1、php如何获取复选框...这样设置是因为我们将所有checkbox复选框作为一个组,php服务器端可以使用$_POST[‘category’]来获取所有被选中复选框值。...2、php如何判断复选框checkbox值是否被选中 知道了php如何获取复选框checkbox值,那么判断复选框checkbox值是否被选中将变得非常简单,我们只需要将变量$checkbox_select...被选中<br / "; } ? 以上就是php判断复选框是否被选中方法详细内容,如果有任何需要补充地方可以联系ZaLou.Cn小编。

7.4K20

一款轻量级树形控件EasyTreeview

checkable (Boolean | default: false) 如果值为 true, 树节点将包含复选框且可被选中。...其他 风格化 如果需要改变树控件整体风格样式,这里并不建议节点数据挨个配置样式属性,而是希望引用者重写并覆盖树节点当前类样式。...DOM 结构创建 树控件处理,循环和递归结构必不可少,递归用以纵向处理树深度,循环用以横向处理树广度。...选中/不选中 复选框、收缩/展开 子树、拖拽移动树节点 时,对应 checked、collapsed、branched 状态值 也是需要切换。...保存被选中节点 index 当初始化和用户事件触发时,更新 状态集合 数据 使用 状态集合数据 来同步 节点集合 节点视图 这样处理,不仅使 代码可读性和可维护性 更加良好,也解决了功能上一大痛点

2.2K90

单选按钮用户体验设计

单选按钮是表单系统一个基本元素。它们使用在当存在互斥两个或多个选项列表而用户必须选择其中一个时。换句话说,点选某个尚未选中单选按钮,之前选择就会恢复成未选中。...一、单选按钮名字由何而来 单选按钮命名源自于旧式汽车收音机用来切换频道物理按键—当一个按钮按下,其他就会被弹出,留下唯一按钮处于被选中状态。...然而,复选框只适合真对一个选项是开启还是关闭,单选按钮则可以用到完全不同选项。 你应该记住如下两种情情况如果两个解决方案都有可能: 替代选项。如果复选框无法完全清晰表明意义,则使用单选按钮。...例子,选项是对立因此使用单选按钮是更好方案。 设置向导。你应该在向导页面上使用单选按钮使选项明确,即使一个复选框也是可以接受。一个有默认值单选设计恩狗给用户一个很好建议。...默认选项可能引导用户做出最好决定,并提升它们草错过程信心。 简单是或否答案。当你有一个简单问题而用户只需回答是或否时候,使用复选框还是正确无误

6.1K100

重拾swift版本MVP

当然是主角P啦--MVP模式就是将MVCC复杂逻辑主战场移动到了P……而对于P来说势必会持有:View 和 负责对View绑定,于是……下面的P基类应运而生 public class BasePresenter...{ return mView } } BasePresenter作为IPresenter基础逻辑扩充,同时负责从CView绑定,最终完成交互C=>P=>V=>C一个完成闭环...… 万事具备,下面我们看看怎么完成一个简单MVP流程……展示流程时候我们先看看基本项目结构 ?...,此处我们将ViewController作为MVPView,而Controller只需要接受MVP传递数据和事件完成UI跳转控制即可----逻辑和事件数据交个MVP,而Controller只需要页面跳转穿插即可...{ return nil } func numberOfRows(in tableView: NSTableView) -> Int { return 3

84340

PyQt5编程基础 2.2 信号与槽函数

类里定义一个同名函数并编写代码 添加PlainText初始化函数 Ui_Dialog.py添加如下函数 myDialog.py添加对这个函数调用 运行程序 按清空按钮 内容清空...运行程序 选择Bold复选框 可以看到里面字体加粗了 取消Bold复选框 字体没有加粗了 Underline复选框 编写代码 Qt Creator为Underline复选框添加槽函数,选择...clicked() Ui_Dialog.py添加如下函数 修改Ui_Dialog.pySetupUI函数 修改后变成 运行程序 选中Underline 信号与槽管理是如何实现...overload型信号处理 Italic复选框 找到槽函数名 Qt Creator为Italic复选框设置槽函数,选择clicked(bool) 注意有一个clicked(),还有一个clicked...冲掉了。

1.8K30
领券