以编程方式制作多行标签

时间:2012-02-22 15:39:28

标签: cocoa nstextfield

我需要以编程方式制作一些标签和文本字段。我可以到达那里。

    //create the file name label
    NSTextField* newFileNameLabel = [[NSTextField alloc] initWithFrame:NSMakeRect(objXPos, objYPos, 300.0, 20.0)];
    //set properties
    [newFileNameLabel setBordered: NO];
    [newFileNameLabel setTextColor: [NSColor whiteColor]];
    [newFileNameLabel setDrawsBackground:NO];
    [newFileNameLabel setEditable:NO];
    [newFileNameLabel setStringValue: @"File Name:"];

    [vSheetView addSubview:newFileNameLabel];

但我在文档中找不到任何可以设置wrap属性的内容。在IB中,属性是布局,其中包含'scroll,wrap和truncate'作为选项。 NSTextField没有设置它的方法,如果我上传继承链也没有NSControl。 NSView有一个setNeedsLayout方法,但似乎没有相关性:

You only ever need to invoke this method if your view implements custom layout 
not expressible in the constraint-based layout system by overriding the layout method. 
The system invokes this method automatically for all views using constraints for layout.

NSTextFieldCell也没有任何方法。任何帮助,将不胜感激。

3 个答案:

答案 0 :(得分:8)

在OS X 10.11和Swift 2.1中,以下内容帮助了我:

multilineLabel.lineBreakMode = .ByWordWrapping
multilineLabel.setContentCompressionResistancePriority(250, forOrientation: .Horizontal)

如果使用AutoLayout,则需要设置抗压性。

答案 1 :(得分:5)

这对我有用:

textField.usesSingleLineMode = false
textField.cell?.wraps = true
textField.cell?.scrollable = false

答案 2 :(得分:1)

未经过测试,但setWraps: NSTextFieldCell(继承自NSCell)应该做到的。

要获取单元格,请将cell方法发送到文本字段。 NSTextField继承了cell的{​​{1}}方法,因此,如果您想阅读文档,则需要在文档中搜索NSControl

有关细胞在NSCell docs中的工作原理的更多信息。