11

有没有办法省略 NSTextField 的文本内容,而不是截断?

所以而不是:

The quick brown fox jumped over

它会说:

The quick brown fox jumped ...

我在文档中找不到任何内容。我错过了什么?

更新:有什么方法可以省略和自动换行 - 换句话说,有多行并省略最后一个?

4

2 回答 2

7

所以这是一个很好的问题!即使它在 IB 中公开,它也不是视图或任何子视图上的属性。相反,它作为 NSTextField 使用的单元格上的属性被掩埋。因此,如果您向该对象询问其单元格,则可以读取或设置值:lineBreakMode。

在 NSCell 的类描述中查看所有选项 - truncateCenter 是一个(获取中心省略号)。

编辑:更新的问题提示了以下想法。就个人而言,我认为尝试获取该 google 代码过于矫枉过正,也许您可​​以通过创建一个迷你自定义 textField 来做一些不那么复杂的事情。

  • 创建一个客户 NSView 对象并给它一个字符串和字体属性以及一些与以下操作相关的方法,甚至可能是一个宽度属性

  • 本质上,这个想法是使用 Cocoa NSString 类别,它可以让您从字符串/字体组合中确定字符串的长度(可能还有它的高度)(我在 UIKit 中使用它,在 Cocoa 中确实使用了等价物,但已经有一段时间了.. .)

  • 您的视图方法之一将是“计算”。当你得到这个时,将字符串转换为一个单词数组,使用单个空格作为分隔符(或使其更复杂)。然后,开始计算绘制字符串的长度,取第一个工作,附加一个空格和第二个,等等,直到你发现你已经超过了他的宽度。这是您的第一行字符串。

  • 继续为要绘制的线数(2?3?)执行此操作。计算 unicode char 的长度... - 我记得它的选项分号 - 并保留它。

  • 在最后一行中,继续添加单词直到超过长度,然后一次备份一个单词,验证最后附加的字符串字符串(减去尾随空格)但带有 '...' 字符是否适合空间。

  • 您可以通过在边框周围添加填充等来使这个更漂亮。

  • 一旦计算完成(当然你会缓存答案的所有位),当它得到'drawRect:...'时,你的视图就准备好了。您定位在 (0, bounds.size.height - 21) 并绘制第一段,然后向下移动 21 个点并绘制第二条线,依此类推。

如果我要编写这个代码,我会计划 2-4 小时 - 这不是微不足道的,也许逻辑有点复杂,但它很简单。祝你好运!

于 2012-08-03T23:53:01.147 回答
3

虽然在这个旧问题中不接受正确答案 - 滚动到最后一个答案 - 它包括代码截断多行 NSTextField 的最后一行

该解决方案包括结合使用椭圆和换行。

于 2012-09-17T05:47:08.777 回答