0

NSTextFieldにバグがあるようです。アプリケーションを起動すると、すべてが正しく描画されます。しかし、textFieldをクリックするとすぐに、ビューがめちゃくちゃになります。より具体的には、私drawRect:がタイプするときはいつでも呼び出されますが、より小さなrectですべての問題を引き起こします。

テキストを選択すると、再び正しく描画されます。唯一の解決策は、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];
}

TRUEdrawRectで/に編集可能な設定のようなトリックFALSEは機能しませんでした。また、メソッドで別のfocusRingTypesに設定できませんでした。

4

1 に答える 1

0

さて、私はこの描画の問題を何とか修正することができました。ビューinitメソッドで、初期フレームに設定されたグローバルCGRect変数を設定しました。

呼び出されるたびに、グローバル変数で-(void)drawRect:(CGRect)dirtyRect上書きしました。dirtyRect

これが誰にも役立つことを願っています。これは最善の解決策ではないと思いますが、うまくいきます:)

于 2013-01-24T21:12:06.320 に答える