OSX Cocoa NSSearchField清除按钮无响应点击

时间:2016-08-12 15:19:38

标签: swift cocoa nsview nssearchfield

我放置NSSearchField并将其边框设置为none,我发现清除按钮无法点击a.k.a.点击时没有响应。如果我再次设置边框,它工作正常。

enter image description here

我已经调试了几个小时了,发现当我将边框设置为none时,文本编辑器的宽度将会扩展并且阴影(覆盖)清除按钮。

截图

enter image description here

查看层次结构调试屏幕截图

enter image description here

重现的步骤:

  1. 创建一个空的cocoa项目/ app
  2. 放置NSSearchField
  3. 将边框设置为无
  4. 运行应用,填写搜索字段,然后尝试点击清除按钮
  5. 这是一个错误吗?或者它打算这样做?

    注意:可可开发中的新手

2 个答案:

答案 0 :(得分:8)

我遇到了这个问题并将其视为Cocoa中的一个错误。但是很容易在自定义控件或视图控制器中修复。只需在界面构建器中保留文本字段,然后通过使用新的CALayer来终止边框。例如:

TABLE1

如您所见,我只是在新图层中恢复控制颜色而不保留任何其他内容。它并不完美,但至少可以提供良好的开端。

答案 1 :(得分:1)

julia_v's answer几乎是正确的。您还应该从rect.origin.x中删除searchButtonWidth以将rect返回。

而且我还添加了一些逻辑来制作这些"技巧"只在需要的时候。

override func select(withFrame rect: NSRect, in controlView: NSView, editor textObj: NSText, delegate: Any?, start selStart: Int, length selLength: Int) {

    var newRect = rect

    if !isBordered || isBezeled {
        let cancelButtonWidth = NSWidth(cancelButtonRect(forBounds: rect))
        let searchButtonWidth = NSWidth(searchButtonRect(forBounds: rect))

        newRect.size.width -= (cancelButtonWidth + searchButtonWidth)
        newRect.origin.x += searchButtonWidth
    }
    super.select(withFrame: newRect, in: controlView, editor: textObj, delegate: delegate, start: selStart, length: selLength)
}

创建子类后,只需将其设置为IB身份检查器中的NSSearchFieldCell实例。