Ellipsize NSTextField?

Cha*_*ltz 11 cocoa objective-c

有没有办法椭圆化NSTextField的文本内容,而不是截断?

所以代替:

The quick brown fox jumped over
Run Code Online (Sandbox Code Playgroud)

它会说:

The quick brown fox jumped ...
Run Code Online (Sandbox Code Playgroud)

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

更新:有没有办法椭圆化和wordwrap - 换句话说,有多行和ellipsize最后?

Dav*_*d H 7

所以这是一个很好的问题!即使它暴露在IB中,它也不是视图或任何子视图上的属性.而是将其作为NSTextField使用的单元格中的属性隐藏.因此,如果您将该对象请求其单元格,则可以读取或设置值:lineBreakMode.

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

编辑:更新的问题提示以下想法.就我个人而言,我认为尝试获取谷歌代码是过度的,也许你可以通过创建一个迷你自定义textField做一些不太复杂的事情.

  • 创建一个客户NSView对象,并为其提供字符串和字体属性以及与下面的操作相关的一些方法,甚至可能是width属性

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

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

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

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

  • 你可以通过在边界附近添加填充物来制作这个发烧友等.

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

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