Полноэкранный (киоск) NSWindowController с WebView нужно сначала щелкнуть, прежде чем можно было нажимать на любые ссылки - PullRequest
0 голосов
/ 01 ноября 2018

Я создаю приложение, в котором одной из функций является веб-браузер для киоска.

Веб-браузер находится в NSWindowController, и происходит странная вещь: когда загружается NSWindowController, я устанавливаю URL-адрес WebView в значение по умолчанию и начинаю загрузку страницы. Все загружается нормально и т. Д., Но я не могу взаимодействовать с WebView (т. Е. Щелкнуть ссылку на загруженной странице), прежде чем щелкнуть в любом месте окна. После этого все работает нормально. Похоже, что в окне отсутствует «фокус», и после нажатия на окно, оно получает фокус, и я вижу, как курсор меняется при наведении курсора на ссылки и т. Д. *

Это не проблема, когда я не использую [[self.window contentView] enterFullScreenMode:[NSScreen mainScreen] withOptions:nil];

В окне также есть пара кнопок, но они работают только при первом нажатии без фокусировки.

В любом случае вот код, который выполняет большую часть работы:

NSApplicationPresentationOptions options =
NSApplicationPresentationHideMenuBar|NSApplicationPresentationHideDock|
NSApplicationPresentationDisableHideApplication|
NSApplicationPresentationDisableProcessSwitching|
NSApplicationPresentationDisableAppleMenu| NSApplicationPresentationDisableForceQuit;

[NSApp setPresentationOptions:options];
[[self.window contentView] enterFullScreenMode:[NSScreen mainScreen] withOptions:nil];


[self.webView setFrameLoadDelegate:self];
[self.webView setPolicyDelegate:self];

NSString *url = [[NSString alloc] initWithString:@"https://www.google.com"];
[[self.webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];

1 Ответ

0 голосов
/ 01 ноября 2018

Я предполагаю, что ваш webView не первый респондент, прежде чем вы нажмете на него. Вы можете изменить это с помощью

[[self window] makeFirstResponder:webView];

Также [self.window makeKeyAndOrderFront:self]; или [NSApp activateIgnoringOtherApps:YES]; могут вносить изменения в зависимости от ситуации. Если это не поможет, вам может потребоваться сделать вызов с задержкой, зависящей от того, когда он первоначально использовался.

[self performSelector:@selector(myDelayedActivateFunction) withObject:nil afterDelay:0.0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...