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

包含NSTableview的NSAlert大小问题

NSTableView 是 macOS 开发中的一个关键组件,用于显示和编辑表格数据。当你在 NSAlert 中嵌入 NSTableView 时,可能会遇到大小调整的问题,尤其是在需要动态添加或删除表格行时。以下是一些基础概念和相关解决方案:

基础概念

  • NSAlert: macOS 中的一个弹出式对话框,用于向用户显示重要信息或请求输入。
  • NSTableView: macOS 中的一个控件,用于显示和编辑表格数据。

相关优势

  • 灵活性: 可以自定义表格的列和行,以及单元格的内容。
  • 交互性: 用户可以直接在表格中进行编辑和选择操作。

类型

  • Static Table Views: 表格内容和结构在编译时确定。
  • Dynamic Table Views: 表格内容和结构可以在运行时动态改变。

应用场景

  • 配置对话框: 显示和编辑复杂的数据结构。
  • 数据展示: 如日志、设置选项等。

遇到的问题及原因

问题: 当 NSTableView 中的数据发生变化(如添加或删除行)时,NSAlert 的大小可能不会自动调整以适应新的内容。

原因: NSAlert 默认情况下不会监听其内部视图(如 NSTableView)的大小变化,并自动调整自身大小。

解决方案

以下是一个示例代码,展示如何在 NSTableView 数据变化时调整 NSAlert 的大小:

代码语言:txt
复制
import Cocoa

class CustomAlert: NSAlert {
    private var tableView: NSTableView!
    
    init(tableView: NSTableView) {
        super.init()
        self.tableView = tableView
        self.accessoryView = tableView
        self.addButton(withTitle: "OK")
        
        // 监听表格视图的内容变化
        NotificationCenter.default.addObserver(self, selector: #selector(tableViewDidChange), name: NSTableView.didAddRowNotification, object: tableView)
        NotificationCenter.default.addObserver(self, selector: #selector(tableViewDidChange), name: NSTableView.didRemoveRowNotification, object: tableView)
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    @objc func tableViewDidChange() {
        // 调整表格视图的大小以适应内容
        let size = tableView.fittingSize
        tableView.frame.size = size
        
        // 调整 NSAlert 的大小
        self.accessoryView?.frame.size = size
        self.window?.setContentSize(size)
    }
}

// 使用示例
let tableView = NSTableView()
tableView.addTableColumn(NSTableColumn(identifier: "Column1"))
tableView.dataSource = self // 假设你已经实现了 NSTableViewDataSource 协议

let alert = CustomAlert(tableView: tableView)
alert.runModal()

关键点解释

  1. 自定义 NSAlert: 创建一个继承自 NSAlert 的自定义类,并在其中添加对 NSTableView 大小变化的监听。
  2. 监听通知: 使用 NotificationCenter 监听 NSTableViewdidAddRowNotificationdidRemoveRowNotification 通知。
  3. 动态调整大小: 在接收到通知后,重新计算 NSTableView 的合适大小,并相应地调整 NSAlert 的大小。

通过这种方式,可以确保 NSAlert 始终能够适应 NSTableView 中的内容变化,提供更好的用户体验。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Jekyll-Admin-Mac-列表

6E7EFC46-9753-4F4A-B497-1CE2C5FCBCD2 因为名字的长度是不固定的,我们就设置 NSTableView的第一个 Column的宽度随着 NSTableView的宽度变化。...我们关联一下 Xib上面的 NSTableView控件。 设置 NSTableView的 Header背景颜色。...⛔️这里遇到了一个棘手的问题,如果使用 NSTableHeaderView的子类,在 Draw绘制虽然颜色是设置了,但是标题已经被覆盖掉了。...我还尝试过在 BaseListView使用其他的泛型类间接代理,但是依然无法解决我们的问题。 我现在唯一能够想到的方案就是所谓的协议,用协议声明泛型参数。...///< 用来知道要删除那个文件 关于 NSAlert 对于弹出框我们可以使用 NSAlert控件 参考资料: 苹果小白的学习之路--NSAlert的两种使用方法。

3.2K10
  • Oracle中大小写敏感的问题

    上周组内例会,提到不同数据库中大小写敏感的问题,问题很小,但是如果不注意,尤其是开发不规范的场景,很容易进坑。 首先,我们看下Oracle中对大小写的处理。...,作用和上述相同, 除此之外,其他的对象,字段、视图、索引、序列等,都是大小写不敏感的。...如果我们在开发代码中不使用“”双引号特意标记对象的大小写,在和数据库交互的时候,就都会自动转成大写,当然都特意写成大写,一样的效果。...因此对使用Oracle数据库的应用来说,避免程序中使用“”双引号标记对象大小写,这是在开发中应该遵守的一条准则。...但是,其他一些数据库,有的是大小写敏感,有的习惯使用大小写混合定义,当做这些数据库迁移的时候,就得注意程序中,大小写的问题,避免带来不必要的麻烦。

    1.9K10

    文件大小写引发的问题

    点击上方蓝色字体,关注我们 在 Jenkins 构建一个之前的前端项目突然就报错了: 由于更改的代码太多具体改的什么我也忘记了,只能看看 Jenkins 构建留下的日志: 意思应该是:没有找到 Ruler...git 忽略了文件大小写的更改。...经过一番搜索,了解到 git 项目有相关的配置,我特地初始化了一个空的 git 仓库,进入 .git 目录: 打开 config 文件: 可以看出 git 默认是忽略大小写的,那我把它改为 false...改完后把代码推到仓库却看到两个文件: 然后我又看了下文档: 看来官方还是不推荐直接改 ignorecase 的默认值,那我们该如何使文件大小写更改能被 git 识别呢?...虽然问题解决了,但是我没有找到更好的规避方法,下次可能还会直接修改文件名而不是通过 git 命令,若有什么更好的方法,请留言!

    77820

    ​数据存储和传输的大小端问题

    数据在memory中存储,以及在总线传输的时候,同样也会面临大小端问题。这个蛋疼的问题之所以存在,就好比各个国家的插座不兼容一样,都是历史遗留问题。...代码片段3 32位小端相比于32位大端就比较清晰简单了,只是把byte的顺序颠倒了一下。 ? 代码片段4 2 总线传输 总线传输的时候,同样有大小端问题。这里按照总线是并口还是串口,分别说明。...3 如何调试大小端问题 当你搭好验证环境,开始调试的时候,发现灌到RTL上的激励或者抓到的输出结果完全对不上的时候,不要慌,有可能只是大小端搞错了。...另外,为了快速调试大小端问题,可以把数据设置为’h12345678这样子递增的模式。这样查看仿真log 或者波形,都是一目了然的。...这个图相当于是一个128位(每行16byte)的小端存储器显示。 结语 Q哥今天给大家讲述了数据存储和总线传输的大小端问题。

    1.5K20

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

    宽度是固定的,但是高度不固定,我们使用自动布局。 ? 最上线显示 Logo的地方大小为 205x75。我们采用 NSImageView。我们采用如下的布局。 ?...但是到目前来说我们几乎达到显示 Logo,但是我们的背景颜色设置白色不是我们所希望的,我们设置默认的为透明颜色。 我们还发现我们我们的试图并没有达到我们设置约束的大小。...我的试图已经能随着变化自动改变高度了。 这个时候我们还发现了一个问题,我们的 Window可以压缩宽度最小,这样左边的侧栏已经挡着了。...我们发现我们剩下的只有一个 Column的宽度只有 116并不是全屏显示的。 去掉 NSTableView的边框 我们设置宽度为 205。 ? 我们现在发现了一个问题,我们本来有205的宽度的。...我们在 NSTableView的属性里面看到这个。 ? 我们的宽度留3大小。但是就算去掉了3还是只有 203,剩下的 2跑到那里去了。

    2.1K10

    macOS开发之NSTableView的应用详解

    NSTableView的应用详解 一、引言     和iOS开发中的UITableView有很大差别,NSTableView并非是一个可滚动的列表视图,其是一个不可滚动、支持多列多行的原始列表视图。...与UITableView类似,NSTableView的数据也是用过DataSource代理来提供,通过Delegate代理来进行表格视图的定制化。...在OS X v10.6版本之前,NSTableView中行数据载体视图必须是NSCell的子类,之后版本的OS X支持开发者创建基于View的TableView视图,同样也支持基于Cell的TabelView...这是一个最简单的TableView示例,但是细读代码,麻雀虽小五脏俱全。首先NSTableView中的列是由NSTableColumn类描述的。一个列表可以有多个列。...)rect; //获取包含某个点的列 - (NSInteger)columnAtPoint:(NSPoint)point; //获取包含某个点的行 - (NSInteger)rowAtPoint:(NSPoint

    4.8K21

    SQL Server不区分大小写的问题

    SQL Server不区分大小写的问题   默认情况下,SQL Server不区分大小写,如果数据表TEST的TNAME列中有数据“abcd”和“Abcd”, 如果使用查询语句:select * from...可以通过设置排序规使其区分大小写,可以分别在创建数据库、修改数据库、创建表的字符型列(char\varchar\nchar \nvarchar等)时指定排序规则来实现。...如 create database test  COLLATE  Chinese_PRC_CS_AS   --这样创建的数据库中区分大小写 alter database test  COLLATE  Chinese_PRC_CS_AS...   --修改后的数据库中区分大小写 Create table test(tid int primary key,tname varchar(20) COLLATE  Chinese_PRC_CS_AS...) --这样创建的tname列在使用SELECT 语句时就可以区分大小写了。

    3.3K20

    PostgreSQL 库,表,字段,值大小写的问题

    群里,经常看到一些学友们,对PostgreSQL 的大小写问题有疑惑,本着自己也敢兴趣的原则,并且也想弄清楚这件事情,这里的做点功课。...我们来对这些数据库的表进行访问 通过以上测试,可以得出,数据库的库名是大小写是敏感的,所以在建库的时候,需要注意大小写的问题。...好了数据已经生成了,看看有些人在群里面提出的问题,是不是真的 看到上面的结果,验证了群里面有人提出的问题的真实性,的确不同的大小写值,会在查询里面有问题。...抱怨的声音就由此而发,其中有的人就说,我们那些前端根本就不管大小写的问题,我们后端怎么去写SQL 语句去查这些数据。...其实So Easy 我们来将问题化整为零 1 输入数据不规范,里面大小写都有,但查询的时候,给出的条件是小写,请问是否可以将大写,大小写都有的记录查出来。

    4.8K20

    关于大小端和数据的存取及范围问题

    目录 大小端 如何理解 注意 基本概念 如何影响数据存储 如何存取 以小端为例 总结 取值范围 对于-128的理解 为什么存的是补码 ---- 大小端 数据在内存的存入有大小端之分 如何理解...吃鸡蛋:对于吃鸡蛋从大的一端还是小的一端这件事情,没有一定的合理说法 不通电脑硬件厂商的选择不同  注意 无论如何放,以同条件去取,都可以!  ...基本概念  记忆:小小小(成为小端),其他的是大端 如何影响数据存储 大小端存储方案本质是数据和空间按照字节为单位的一种映射关系  注:并不影响用户使用 一个字节是不考虑大小端的!...如何存取 以小端为例  总结 1.先看大小端 2.再看自身类型(signed/unsigned) 取值范围 signed(有符号) char:范围是-128—127  对于-128的理解 半计算半规定的一种方式... unsigned char:0—2^8-1 所谓的特定的数据类型,能表示多少个数据,取决于多个比特位对应的排列组合的个数 为什么存的是补码

    33530

    Mac OSX 开发基础控件学习之 NSOutlineView

    NSOutlineView-feature.png 在开发基于osx的Application的过程中,当我们需要显示一组列表结构的数据时,比较容易想到的控件是NSTableView;但如果你显示的数据有层级结构时...,NSTableView就会面临一个问题:因为在osx中,NSTableView没有分组功能( sections) 因为在cocoa 中提供了另一个控件供满足我们的需求NSOutlineView它是继承自...NSTableView的子类,是Mac OSX Application常用的控件之一,与NSTableView相似,NSOutlineView也使用行和列来显示内容,但所不同的是NSOutlineView...使用具有层级的数据结构 下面我们通过一个示例(你也可以从这里Demo下载工程,但更推荐自己一步一步创建工程并实现功能)来简单学习一下怎样使用NSOutlineView显示带有层级结构的数据内容 创建osx...数据模型 NSOutlineView的Data model 与NSTableView有些不同,因为NSOutlineView显示层级结构,因此Data model中要能够表示出这种数据的层级来:root

    1.6K20

    java 算法中常见的问题总结1(代码实现,不包含逻辑)

    参考地址:   http://blog.csdn.net/swandragon/article/details/4926457 API上面的 Integer类中的方法 java中删除数组中的某个元素...,需注意,外国的第一天是周日,周二是第二天 外国的月份是从0开始的,如:一月需要设置月份为0 2.时间戳转换 /**  * 日期格式时间戳 转换成字符串 * @param date 时间戳 * @param...,尽量使用equals方法判断,不要单单使用 == 这样有时候会出现问题 binarySearch :参考 http://blog.csdn.net/a1b2c3d4123456/article/details.../51097161 此法为二分搜索法,故查询前需要用sort()方法将数组排序,如果数组没有排序,则结果是不确定的,另外 如果数组中含有多个指定值的元素,则无法保证找到的是哪一个。...插入点是索引键将要插入数组的那一点,即第一个大于该键的元素索引。 卢卡斯定理 lucas(数论定理): C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p    (p为质数)

    87230
    领券