我放置NSSearchField
并将其边框设置为none
,我发现清除按钮无法点击a.k.a.点击时没有响应。如果我再次设置边框,它工作正常。
我已经调试了几个小时了,发现当我将边框设置为none时,文本编辑器的宽度将会扩展并且阴影(覆盖)清除按钮。
截图
查看层次结构调试屏幕截图
重现的步骤:
NSSearchField
这是一个错误吗?或者它打算这样做?
注意:可可开发中的新手
答案 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实例。