首页
学习
活动
专区
工具
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-Base的TableView中,其作为行容器存在。

4.8K21

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(类似iOS中的UITableview)。...可能你已经意识到了,在iOS中你熟知的许多UIKit控件,就是脱生于Mac OSX 的AppKit,只是把原来在Mac OSX中的NS前缀改为UI前缀而已,因此,多数情况下,你在iOS中经常用的控件基本上...ARC) assign:基本数据类型(非对象类型)使用,不会触发内存管理问题(不会纳入到ARC中) 1.17 使用同样的步骤,我们再创建另一个数据模型ScaryBugsDoc,并编写代码,结果如下...在OSX中table view 控件是NSTableView,它类似iOS中的UITableView,不同的是在NSTableView的一行(row)中可以有很多列(column) 1.20 选中table

    4.1K40

    为什么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.3K30

    前端问题汇总

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

    2.5K20

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

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

    3.6K10

    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.2K10

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

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

    9.8K21

    【愚公系列】《AI智能化办公:ChatGPT使用方法与技巧从入门到精通》 024-ChatGPT的办公应用(ChatGPT在Excel中的应用

    使用ChatGPT插件: 在Excel中,找到ChatGPT插件的位置或菜单选项。通常,插件会显示在工具栏或菜单栏中。 点击插件图标或选项,启动ChatGPT插件。...4.编写VBA代码增加复选框 接下来,我们想要实现的效果是,每条记录可以被勾选,即在“产品名称”列显示复选框。...ChatGPT,让它来编写VBA代码实现添加复选框及复选框能被勾选的操作。...复选框的选中状态将反映在对应的单元格中(选中时为TRUE,未选中时为FALSE)。 请注意,运行VBA脚本和使用宏可能会受到Excel安全设置的限制。...答: 如果你已经按照之前的指示,在A1:A6区域为每个单元格增加了复选框,并且这些复选框分别与它们所在的单元格链接,那么当你选中或未选中这些复选框时,对应单元格会显示TRUE(选中)或FALSE(未选中

    14120

    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.

    2.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.5K10

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

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

    1.5K20

    一款轻量级树形控件EasyTreeview

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

    2.3K90

    单选按钮的用户体验设计

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

    6.2K100

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

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

    1.9K30

    重拾swift版本MVP

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

    87140
    领券