2013-11-09 1 views
3

У меня есть NSView с редактируемые NSTextField и нескольких других подвидов, как NSView, NSSlider, NSImage и т.д.Как уволиться внимание на NSTextField при нажатии вне

  1. После того как я вошел в мой текст в редактируемый NSTextField и щелкните по любому из других видов, переместите ползунок и т. Д. Я бы хотел, чтобы мой NSTextField потерял фокус. Я пробовал называть resignFirstResponder, но это, похоже, не работает. Как я могу это сделать?
  2. Когда я отмечаю текст внутри своего NSTextField отображается синий фон за текстом. Как я могу изменить цвет?
+1

Я думаю, что вы должны были спросить их как 2 отдельные вопросы. Как вы примете ответ, если один человек даст лучший ответ (1), а другой человек даст лучший ответ (2)? – JWWalker

ответ

7

Предположим, что у вас есть подкласс NSView, называемый clickView1.h. В отношении this post вы можете достичь своей цели в № 1 следующим образом.

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

Что касается № 2, я не понимаю вопроса.

+0

Спасибо. Ad 2) была опечатка. Это синий фон маркировки, отображаемый при маркировке текста в * NSTextField * (например, если вы хотите его скопировать). Можно ли изменить этот цвет? – dhrm

+0

Говоря синий фон маркировки, это звучит так, будто вы имеете в виду кольцо фокусировки. Я предлагаю вам открыть новую тему вместо того, чтобы задавать два отдельных вопроса по одной теме. –

+4

Вместо поиска делегата приложения было бы проще сказать '[[self window] makeFirstResponder: nil]'. – JWWalker

0

Попробуйте следующий метод:

[[NSApp mainWindow] performSelector:@selector(resignFirstResponder:) 
          withObject:yourTextfield 
          afterDelay:0.0]; 
3

На вопрос 1, я согласен с 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; 
} 
+0

Это еще один классный трюк, который он мог бы использовать. Но разве он не говорит о цвете кольца фокусировки? –

+0

@BlueTomato, Он сказал «за текстом», а не «вокруг текста», поэтому я подумал, что это цвет подсветки. – JWWalker

+0

Я тебя не виню. Я могу использовать ваш код. Поэтому вы понимаете. –