Текстовое поле по умолчанию в элементе состояния - PullRequest
2 голосов
/ 11 июля 2011

У меня есть текстовое поле внутри элемента статуса, и я хотел бы, чтобы оно было немедленно активным при нажатии на элемент статуса. Я попробовал обычный becomeFirstResponder в applicationDidFinishLaunching, а затем в awakeFromNib, но это не сработало. Я думаю, что это потому, что меню пункта состояния не открывается, когда эти методы вызываются при запуске, возможно, игнорируя его. Затем я попытался установить действие при нажатии на элемент состояния, но кто-то здесь сказал мне, что эти действия могут быть выполнены, только если у элемента состояния нет выпадающего меню, как у моего. Я хочу, чтобы щелкнул элемент состояния и появилось раскрывающееся меню с активированным текстовым полем, чтобы можно было немедленно начать набор текста. Я использую пользовательский вид для отображения текстового поля в меню, не уверен, что это актуально, но, возможно, что-то еще должно использоваться в этой ситуации?

Спасибо.

1 Ответ

1 голос
/ 11 июля 2011

Вы можете установить объект как delegate меню пункта состояния, реализовать метод делегата ‑menuWillOpen:, а затем использовать ‑performSelector:withObject:afterDelay:modes: для установки первого респондента.

Это будет гарантировать, что вызов для создания текстового поля первым респондентом произойдет при следующем запуске через цикл обработки событий после открытия меню. Вам необходимо передать NSRunLoopCommonModes или NSEventTrackingRunLoopMode в массиве режимов цикла выполнения, переданных параметру modes:, потому что обычный метод performSelector:withObject:afterDelay: не будет вызывать селектор, пока меню не будет закрыто.

- (void)menuWillOpen:(NSMenu *)menu
{
    [self performSelector:@selector(highlightField) withObject:nil afterDelay:0.0 inModes:[NSArray arrayWithObject:NSRunLoopCommonModes]];
}

- (void)highlightField
{
    [[yourTextField window] makeFirstResponder:yourTextField];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...