NSTextField左侧的填充

4
如何在使用Swift的文本字段单元格中在文本左侧添加填充?以前的答案仅适用于UITextField或Objective C。请注意,这适用于NSTextField。

一个 NSTextField 似乎没有与 UITextField 相同的成员函数。 - user3225395
@NSNoob 因为它是为 OS X 设计的? - Desdenova
@Desdenova 没错。我正在开发一款macOS应用程序。但愿它和iOS开发之间有更多的相似之处! - user3225395
@Desdenova,pbodks,刚看到OSX标签。对此感到抱歉。 - NSNoob
1个回答

8

这里是一个使用Objective C制作自定义NSTextFieldCell的示例。

使用Swift移植后,代码如下:

import Cocoa

class PaddedTextFieldCell: NSTextFieldCell {

    @IBInspectable var leftPadding: CGFloat = 10.0

    override func drawingRect(forBounds rect: NSRect) -> NSRect {
        let rectInset = NSMakeRect(rect.origin.x + leftPadding, rect.origin.y, rect.size.width - leftPadding, rect.size.height)
        return super.drawingRect(forBounds: rectInset)
    }
}

我已将padding添加为@IBInspectable属性。这样,您就可以在Interface Builder中根据您的喜好进行设置。
与Interface Builder一起使用
要使用您的新PaddedTextFieldCell,您需要将常规的文本框(Text Field)拖到xib文件中。

Normal Text Field Cell

然后将内部的 TextFieldCell 的类更改为 PaddedTextFieldCell

Change TextFieldCell to PaddedTextFieldCell

成功!

The final result

使用代码

要从代码中使用PaddedTextFieldCell,您可以像这样操作(感谢@Sentry.co的帮助):

class ViewController: NSViewController {

    @IBOutlet weak var textField: NSTextField! {
        didSet {
            let paddedTextField = PaddedTextFieldCell()
            paddedTextField.leftPadding = 40
            textField.cell = paddedTextField
            textField.isBordered = true
            textField.isEditable = true
        }
    }

    ....
}

希望对你有所帮助。

1
只有在没有设置背景颜色或边框未自定义的情况下才有效。请参见此链接:https://dev59.com/N5jga4cB1Zd3GeqPFRrT - Neovibrant
2
什么鬼?答案是关于NSTextField的,而不是NSTextFieldCell。我仍然无法弄清楚如何为NSTextField(而不是NSTextFieldCell)添加填充。 - fnc12
3
每个 NSTextField 都有一个 NSTextFieldCell,它实现了绘制功能。因此,如果你想要自定义文本字段的绘制,你需要调整它的单元格或实现自己的 NSTextFieldCell 并分配给文本字段。 - DarkDust
请添加有关如何在文本字段中实现单元格的说明。谢谢。 - Sentry.co
1
@Sentry.co 抱歉,我不确定我理解你的问题,请详细说明一下 :) 我有一个PaddedTextField,它继承自NSTextFieldCell(所以...它可能应该被命名为PaddedTextFieldCell,我现在可以看到...5年后 :))。这是NSTextFieldCell的实现,用于在文本字段中使用_内部_处理带填充的文本字段的绘制。不知道这是否回答了你的问题或者我是否让你感到困惑 :) - pbodsk
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接