更改NSTextfield和多行文本的可编辑性

时间:2016-03-20 21:10:48

标签: swift macos resize osx-elcapitan nstextfield

我有NSTextField用作标签或可编辑文本字段,具体取决于应用程序是处于编辑模式还是处于查看模式。

更改文本字段可编辑性的代码是:

var editable : Bool = false {
    didSet {
        if editable {
            titleTextField?.editable = true
            titleTextField?.bezeled = true
            titleTextField?.drawsBackground = true
            titleTextField?.cell?.usesSingleLineMode = false
            titleTextField?.cell?.wraps = true
            editButton?.state = NSOnState
        } else {
            titleTextField?.editable = false
            titleTextField?.bezeled = false
            titleTextField?.drawsBackground = false
            titleTextField?.cell?.usesSingleLineMode = false
            titleTextField?.cell?.wraps = true
            editButton?.state = NSOffState
        }
    }
}

@IBAction func editButtonPushed(sender : NSButton) {
    if sender.state == NSOnState {
        self.editable = true
    }else{
        self.editable = false
    }
}

我已将Interface Builder中的NSTextField定义为可编辑,并且未选中“使用单行模式”。文本字段位于自定义视图中,该视图是NSSplitView中的右视图。自定义视图还包含一个按钮,用户可以使用该按钮切换编辑模式(它连接到上面代码中的操作)。

当文本字段中的标题很长(即多行)时,标题会在可编辑的文本字段中正确显示。当我单击“编辑”按钮(转换“编辑”模式)时,文本字段将变为不可编辑(上面的else语句)。

问题在于,在非编辑模式下,NSTextField(和父自定义视图)会调整大小,以便完整标题适合ONE LINE上的NSTextField(现在是标签)。我希望文本字段保持相同的大小,并使用两行来显示标题。

如何阻止调整文本字段的大小?我尝试过使用titleTextField?.cell?.usesSingleLineMode = falsetitleTextField?.cell?.wraps = true,但两种解决方案都无效。

0 个答案:

没有答案