Фокус - проблема. Он будет работать, когда q нажат, потому что эта кнопка имеет фокус. Это не работает, если w нажат независимо от того, нажимаете ли вы сначала, потому что кнопка «q» имеет фокус. Вместо этого вы должны использовать KeyBindings. Они работают, несмотря на то, что компонент сосредоточен.
Другим решением было бы добавить нажатия кнопок q и w на ключевой список, добавленный в JFrame, и использовать функции requestFocus () и grabFocus ().
Но вам нужно будет добавить реализацию как для клавишника в JFrame, так и для нажатия кнопки и отпускания кнопки.
Вот идеальная ссылка, чтобы увидеть, как фокус влияет на то, как ваши нажатия клавиш работают в качелях
http://www.javaworld.com/article/2076720/core-java/focus-on-swing.html
Нам не нужно Явно нужно проверить URL-адрес, ниже код делает: -
- (BOOL)application: (UIApplication *)application openURL: (NSURL *)url sourceApplication: (NSString *)sourceApplication annotation: (id)annotation
{
if ([GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation]) {
return YES;
}else if([FBAppCall handleOpenURL:url sourceApplication:sourceApplication]){
return YES;
}
return NO;
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
{
if( [GPPURLHandler handleURL:url
sourceApplication:sourceApplication
annotation:annotation])
{
return [GPPURLHandler handleURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
else if([[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation])
{
return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
return NO;
}
Вы хотите использовать [[UIApplication sharedApplication] canOpenURL:]
canOpenURL
, прежде всего, позволяет вам определить, какие приложения установлены на устройстве. Вы можете проверить префикс URL, чтобы выяснить, из какой службы он пришел. URL-адреса приложения Facebook начнутся с fb:
– Idles
19 June 2013 в 19:54
canOpenUrl
всегда возвращает YES
для обоих. Вы правы, что можете проверить URL-адрес, но обычно библиотека имеет метод handleURL:, который возвращает логическое значение для вас. Вам не пришлось бы беспокоиться о себе, если вы не захотите делать магию самостоятельно.
– MrJre
3 April 2014 в 10:02
Для пользователей Swift (идея от пользователя2144179)
Импорт ниже фреймворков
import Firebase
import GoogleSignIn
import FacebookCore // (FBSDKCore's alternative for swift)
и в ваши методы делегата
// when your target is under iOS 9.0
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
let isFBOpenUrl = SDKApplicationDelegate.shared.application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
let isGoogleOpenUrl = GIDSignIn.sharedInstance().handle(url, sourceApplication: sourceApplication, annotation: annotation)
if isFBOpenUrl { return true }
if isGoogleOpenUrl { return true }
return false
}
или вы может использовать другой метод «open url:», если ваша цель равна 9.0+. SDK также содержат метод для этого.
Ссылка на Firebase: https://firebase.google.com/docs/auth/ios/google-signin
Ссылка на Facebook: https://developers.facebook.com/docs/swift/reference/classes/applicationdelegate.html
Вы можете попробовать следующее:
if ([[url absoluteString] rangeOfString:@"<Your Google Bundle ID>"].location == NSNotFound)
{
// Call FBAppCall's handleOpenURL:sourceApplication to handle Facebook app responses
BOOL wasHandled = [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
// You can add your app-specific url handling code here if needed
return wasHandled;
}
else
{
return [GPPURLHandler handleURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
return YES;
Вызвать вышеупомянутый метод в
(BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
в вашем appDelegeate.m
В основном, что это нужно проверить префикс URL, а затем вызвать метод google +, если префикс url - ur google + bundle id, а если нет, он вызовет метод fb. Надеюсь, это поможет
Метод «application: openURL: sourceApplication: annotation:» устарел от iOS9. поэтому теперь вы можете использовать как.
- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
options:(NSDictionary *)options {
// For Google sign in SDK
if ([[GIDSignIn sharedInstance] handleURL:url
sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]) {
return YES;
// For Facebook SDK
}else if ( [[FBSDKApplicationDelegate sharedInstance] application:app
openURL:url
sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]){
return YES;
//For Google plus SDK
}else if ([GPPURLHandler handleURL:url
sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]){
return YES;
}
return NO;
}