0

NSTextField 中似乎有一个错误。当应用程序启动时,它会正确绘制。但是,只要我单击 textField,视图就会变得一团糟。更具体地说,每当我键入drawRect:时都会被调用,但使用较小的矩形会导致所有问题。

当我选择文本时,它会再次正确绘制。唯一的解决方案是将 设置FocusRingType为可见(例如:)NSFocusRingTypeDefault。但我想没有戒指。这可能吗?

这是我正在使用的代码:

-(id)initWithFrame:(NSRect)frameRect
{
    self = [super initWithFrame:frameRect];
    if(self)
    {
        // Add a label
        NSTextField *textField = [[NSTextField alloc] initWithFrame:CGRectMake(0, 0, frameRect.size.width, frameRect.size.height)];
        [[textField cell] setPlaceholderString:@"URL or search term..."];
        [textField setTextColor:[NSColor greyColor]];
        [textField setBackgroundColor:[NSColor clearColor]];
        [textField setFont:[NSFont fontWithName:@"Open Sans" size:20]];
        [textField setDrawsBackground:FALSE];
        [textField setBordered:FALSE];
        [textField setFocusRingType:NSFocusRingTypeNone];
        [self addSubview:textField];
    }

    return self;
}

-(void)drawRect:(NSRect)dirtyRect
{
    NSInteger borderWdith =  2;

    // Create the path to the button
    NSBezierPath *aPath = [NSBezierPath bezierPathWithRoundedRect:CGRectMake(borderWdith, borderWdith,
                                                                             dirtyRect.size.width-(borderWdith*2),
                                                                             dirtyRect.size.height-(borderWdith*2))
                                                          xRadius:3 yRadius:3];

    // Fill the button with white
    [[NSColor whiteColor] set];
    [aPath fill];
}

TRUE将可编辑设置为/在 drawRect 中的技巧FALSE不起作用。在方法中设置为不同的 focusRingTypes 也失败了。

4

1 回答 1

0

好的,所以我设法解决了这个绘图问题。在视图init方法中,我设置了一个全局CGRect变量,该变量设置为初始帧。

每次调用时,我都会用全局变量-(void)drawRect:(CGRect)dirtyRect覆盖。dirtyRect

希望这对任何人都有帮助。我想这不是最好的解决方案,但有效:)

于 2013-01-24T21:12:06.320 回答