5

NSTextFieldNSView、NSSlider、NSImage などの編集可能な他の複数のサブビューを持つ NSView があります。

  1. 編集可能なNSTextFieldにテキストを入力し、他のビューのいずれかをクリックした後、スライダーなどを動かします。NSTextField のフォーカスを失いたいと思います。に電話してみましたresignFirstResponderが、うまくいかないようです。これどうやってするの?
  2. NSTextField内のテキストをマークすると、テキストの背後に青い背景が表示されます。これはどうしたら色が変わるのでしょうか?
4

3 に答える 3

9

clickView1.h という NSView のサブクラスがあるとします。この投稿を参考にすると、次のようにして、No. 1 の目標を達成できます。

- (void)mouseDown:(NSEvent *)event{
    AppDelegate *appDelegate = (AppDelegate *)[NSApp delegate];
    [appDelegate.window makeFirstResponder:nil];
}

2 番については、質問の意味がわかりません。

于 2013-11-09T14:20:55.530 に答える
3

質問 1 については、 call ではなく、何か別のファーストレスポンダーを作成する必要があるという BlueTomato の意見に同意しますresignFirstResponder。質問 2、サブクラスNSTextFieldCell、およびサブクラスでは、次のようなオーバーライドがあります。

- (NSText *)setUpFieldEditorAttributes:(NSText *)textObj
{
    [super setUpFieldEditorAttributes: textObj];

    if ([textObj isKindOfClass: [NSTextView class]])
    {
        NSTextView* textView = (NSTextView*) textObj;

        [textView setSelectedTextAttributes:
            [NSDictionary dictionaryWithObjectsAndKeys:
                [NSColor redColor],
                NSBackgroundColorAttributeName,
                nil] ];
    }

    return textObj;
}
于 2013-11-09T17:08:39.797 に答える
0

次の方法を試してください。

 [[NSApp mainWindow] performSelector:@selector(resignFirstResponder:)
                          withObject:yourTextfield
                          afterDelay:0.0];
于 2013-11-09T15:42:37.517 に答える