2009-06-16 4 views
0

Я делаю тестовое полноэкранное приложение, используя this guide. Тем не менее, я столкнулся с проблемой, когда хочу получить ключ ввода.Действия в режиме полного экрана

По какой-то причине кажется, что, когда вы устанавливаете NSPanel для захвата экрана, вы также теряете возможность получать события с клавишами вниз. Я попытался сделать триггер кнопки, когда пользователь набирает s, который отлично работает на обычной панели, но, похоже, не работает, когда это изменение применяется .

ответ

0

Этого можно достичь. Удостоверьтесь, что ваш подкласс NSPanel (есть причина, почему вы не используете окно?) -canBecomeKeyWindow, и обе панели и ее 's -acceptsFirstResponder методы возвращают TRUE.

Другой подход нижнего уровня, который вы могли бы попробовать, если вы разрабатываете приложение, использующее нестандартный интерфейс (например, игру), относится к подклассу NSApplication - sendEvent. Шахта выглядит следующим образом:

- (void)sendEvent:(NSEvent *)event 
{ 
    id delegate = [self delegate]; 

    if(([event type] != NSAppKitDefined) && [delegate shouldHandleEvents] && [delegate respondsToSelector:@selector(handleEvent:)]) 
     [delegate handleEvent:event]; 
    else 
     [super sendEvent:event];  
} 
+0

Гарри Джордан: Я использую NSPanel, потому что это то, что он сказал, чтобы сделать в учебнике о полноэкранных приложениях. :) Лучше ли использовать NSWindow в этом случае? Не уверен, что мое приложение использует стандартный интерфейс, но я не думаю, что это так. Итак, в этом случае, просто я должен был бы подклассом -canBecomeKeyWindow и сделать оба метода -acceptsFirstResponder возвращать TRUE? – PF1

+0

Основная причина использования NSPanel над обычным окном - обычно для внешнего вида (тонкая строка заголовка) и того, как он взаимодействует с событиями и другими окнами (т. Е. Плавающим). Поскольку по умолчанию настройка панели не становится окном приложений, если она специально не запрашивается подвью. Если вам нужно использовать NSPanel, вы можете преодолеть это значение по умолчанию, установив для панелей атрибутKeyOnlyIfNeeded на FALSE. Но короткий ответ, я бы рекомендовал вам использовать NSWindow для вашего примера. –

+0

Гарри: Я очень подумываю об использовании NSWindow после прочтения вашего ответа, но я не знаю, будет ли он работать в этой ситуации. В любом случае, спасибо за вашу помощь. У меня теперь проблема исправлена. – PF1

Смежные вопросы