有没有办法省略 NSTextField 的文本内容,而不是截断?
所以代替:
The quick brown fox jumped over
它会说:
The quick brown fox jumped ...
我在文档中找不到任何相关内容。我错过了什么?
更新: 有什么方法可以省略和自动换行——换句话说,有多行并省略最后一行?
最佳答案
所以这是一个很好的问题!即使它在 IB 中公开,它也不是 View 或任何 subview 的属性。相反,它作为 NSTextField 使用的单元格的属性被埋没。因此,如果您向该对象询问其单元格,则可以读取或设置值:lineBreakMode。
在 NSCell 的类描述中查看所有选项 - truncateCenter 是一个(以获得中心省略号)。
编辑:更新后的问题提示了以下想法。就我个人而言,我认为尝试获取该 google 代码有点矫枉过正,也许您可以通过创建一个迷你自定义 textField 来做一些不那么复杂的事情。
创建一个客户 NSView 对象并给它一个字符串和字体属性以及一些与下面的操作相关的方法,甚至可能是一个宽度属性
本质上,这个想法是使用 Cocoa NSString 类别,它可以让您从字符串/字体组合中确定字符串的长度(可能还有它的高度)(我在 UIKit 中使用它,在 Cocoa 中使用了等效项,但是已经有一段时间了……)
您的 View 方法之一是“计算”。当你得到这个时,使用单个空格作为分隔符(或使其更复杂)将字符串转换为单词数组。然后,开始计算绘制的字符串的长度,取第一个工作,附加一个空格,第二个等等,直到你发现你超过了他的宽度。这是您的第一行字符串。
继续执行此操作以获得您要绘制的线条数(2?3?)。计算执行...的 unicode 字符的长度 - 我记得它的选项分号 - 并保留它。
在最后一行中,不断添加单词直到超过长度,然后一次备份一个单词,验证最后附加的字符串字符串(减去尾随空格)但带有 '... ' char 将适合空间。
您可以通过在边框周围添加填充等方式使它更漂亮。
一旦计算完成(您当然会缓存答案的所有位),您的 View 在获取“drawRect:...”时准备就绪。您定位在 (0, bounds.size.height - 21) 并绘制第一段,然后向下移动 21 点并绘制第二条线,依此类推。
如果我要编写这个代码,我会计划 2-4 小时 - 这不是微不足道的,也许逻辑有点复杂,但它很简单。祝你好运!
关于objective-c - 椭圆形 NSTextField?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11804239/