有没有办法省略NSTextField的文本内容,而不是截断?
所以而不是:
The quick brown fox jumped over
它会说:
The quick brown fox jumped ...
我在文档中找不到任何内容。我错过了什么?
更新: 有没有办法椭圆化和自动换行 - 换句话说,有多行和椭圆形的最后一个?
答案 0 :(得分:7)
所以这是一个很好的问题!即使它暴露在IB中,它也不是视图或任何子视图上的属性。而是将其作为NSTextField使用的单元格中的属性隐藏。因此,如果您将该对象请求其单元格,则可以读取或设置值:lineBreakMode。
在NSCell的类描述中查找所有选项 - truncateCenter是一个(获取中心省略号)。
编辑:更新后的问题提示了以下想法。就我个人而言,我认为尝试获取谷歌代码是过度的,也许你可以通过创建一个迷你自定义textField做一些不那么复杂的事情。
创建一个客户NSView对象并为其提供字符串和字体属性以及与下面的操作相关的一些方法,甚至可能是宽度属性
基本上我的想法是使用Cocoa NSString类别,它允许你从字符串/字体组合中确定字符串的长度(可能还有它的高度)(我在UIKit中使用它,确实使用了Cocoa中的等价物,但是已经有一段时间......)
您的一个视图方法将是“计算”。当你得到这个时,使用一个空格作为分隔符将字符串转换为单词数组(或使其更复杂)。然后,开始计算绘制的字符串的长度,进行第一个工作,附加一个空格和第二个等,直到你发现你已超过他的宽度。这是你的第一个字符串。
继续执行此操作以获得要绘制的行数(2?3?)。计算unicode char的长度... - 我记得它的选项分号 - 并保留它。
在最后一行中,继续添加单词,直到超出长度,然后一次备份一个单词,验证最后附加的字符串字符串(减去尾随空格)但是带有'... 'char将适合这个空间。
你可以通过在边界附近添加填充等来使这个发烧友。
一旦计算结束(当然你缓存了答案的所有部分),你的视图在得到'drawRect:...'时就会准备好。你定位在(0,bounds.size.height - 21)并绘制第一段,然后向下移动21点并绘制第二行等等。
如果我要编写这个代码,我会计划2-4个小时 - 这不是微不足道的,也许逻辑有点复杂,但它很简单。祝你好运!
答案 1 :(得分:3)
虽然在这个旧问题中没有接受正确答案 - 滚动到最后一个答案 - 它包含代码Truncate the last line of multi-line NSTextField
解决方案包括使用椭圆和线条组合。