Swift / OSX - 在自定义的NSSecureTextField

时间:2015-09-26 17:30:18

标签: macos swift nstextfield nstextfieldcell

我尝试了一些NSTextFields的样式来获得像Material Design那样的单行文本字段。使用正常的NSTextFields我没有问题,它运行得很好。我正在对NSTextFieldCell进行子类化并绘制我的自定义单元格(底部只有1px边框)。

代码是这样的:



override func drawWithFrame(cellFrame: NSRect, inView controlView: NSView) {
        //let path:NSBezierPath = NSBezierPath.init(rect: cellFrame)
        //path.fill()
        var customRect = cellFrame
        customRect.origin.y = cellFrame.size.height - 1
        customRect.origin.x = 0;
        let usedColor:NSColor = NSColor.grayColor()
        usedColor.setFill()
        let path = NSBezierPath.init(rect: customRect)
        path.fill()
        
        super.drawWithFrame(cellFrame, inView: controlView);
    }




我在界面构建器中添加子类并将其分配给我的TextField(Cell)。一切正常的文本字段都可以正常工作。

但现在我想对NSSecureTextFields做同样的事情,但结果很奇怪。 即使我将焦点设置为NONE,也可以看到对焦环。

NSSecureTextFieldCell的源代码与上面的代码相同(当然,我的子类是NSSecureTextFieldCell而不是NSTextFieldCell),但是为什么它没有显示单元格底部的行?当我将CustomCell-Class分配给Cell时,为什么我会得到该死的聚焦环?我只是不理解它,这让我疯了。

Download Xcode Project File here (36 KB)

2 个答案:

答案 0 :(得分:0)

您可以使用以下代码删除viewDidLoad中的聚焦环

self.SecuredTextField.focusRingType = NSFocusRingType.None

答案 1 :(得分:0)

我遇到了同样的问题,我使用标准NSTextField并将NSSecureTextFieldCell子类作为其单元类来解决它。