Macos 带左对齐占位符的NSSearchField

Macos 带左对齐占位符的NSSearchField,macos,cocoa,macos-sierra,nssearchfield,Macos,Cocoa,Macos Sierra,Nssearchfield,设置centersPlaceholder=false后,占位符将在左侧正确对齐,但搜索按钮不会显示其图像。输入某些文本时,“取消”按钮也是如此。这是正确的行为还是我遗漏了什么?揭示了如何使用奇怪的行为(ab)在字段中强制左对齐。只需将NSSearchFieldCell子类化并覆盖draw方法: import Cocoa class FilterFieldCell: NSSearchFieldCell { override func draw(withFrame cellFrame: N

设置
centersPlaceholder=false
后,占位符将在左侧正确对齐,但搜索按钮不会显示其图像。输入某些文本时,“取消”按钮也是如此。这是正确的行为还是我遗漏了什么?

揭示了如何使用奇怪的行为(ab)在字段中强制左对齐。只需将NSSearchFieldCell子类化并覆盖
draw
方法:

import Cocoa

class FilterFieldCell: NSSearchFieldCell {
    override func draw(withFrame cellFrame: NSRect, in controlView: NSView) {
        super.draw(withFrame: cellFrame, in: controlView)
    }
}
然后将搜索字段单元格设置为此类。

#定义kSearchButtonWidth 22.f
#define kSearchButtonWidth 22.f

#import "AMSearchField.h"

@implementation AMSearchField

- (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];
    // Drawing code here.
}

- (NSRect)rectForSearchButtonWhenCentered:(BOOL)isCentered
{
    CGRect rect = [super rectForSearchButtonWhenCentered:isCentered];
    if (rect.size.width < kSearchButtonWidth) {
        rect.size.width = kSearchButtonWidth;
    }
    return rect;
}

- (NSRect)rectForSearchTextWhenCentered:(BOOL)isCentered
{
    CGRect rect = [super rectForSearchTextWhenCentered:isCentered];
    if (rect.origin.x < kSearchButtonWidth) {
        CGFloat delta = kSearchButtonWidth - rect.origin.x;
        rect.origin.x = kSearchButtonWidth;
        rect.size.width = rect.size.width - delta;
    }
    return rect;
}

@end
#导入“AMSearchField.h” @搜索字段的实现 -(void)drawRect:(NSRect)dirtyRect{ [super-drawRect:dirtyRect]; //这里是绘图代码。 } -(NSRect)矩形搜索按钮居中时:(BOOL)输入 { CGRect rect=[super-rectForSearchButtonWhenCentered:isCentered]; if(rect.size.width

在xib文件中,将search class设置为
AMSearchField

,我认为您也可以通过在
NSSearchField
的子类上重写
draw(udirtyrect:NSRect)
并调用super来修复该绘图。