在 App Delegate 中调用 IBAction
Call IBAction in App Delegate
我想在我的 objective c 应用程序中添加 3d 触摸主屏幕快捷方式。当按下 UIButton 时,我的应用程序的主要部分起作用。这将调用 ViewController.h 和 ViewController.m
中的方法
- (IBAction)StartScanning:(id)sender;
这允许相机开始运行并推送正确的视图控制器和所需的方法。
我已经阅读了很多演练,但仍然无法理解如何在按下 3d 触摸快捷方式时启动此 IBAction。
抱歉,如果这是一个重复的问题,或者我只是愚蠢。我对这一切有点陌生。
这并不难,正如您所提到的,有很多教程可以提供帮助。总之,首先您需要将 3d touch delegate 添加到您的 ViewController.h 或 .m。 <UIViewControllerPreviewingDelegate>
这将使您能够访问显示主屏幕快捷方式所需的委托方法。这是我的一个应用程序的示例(在此示例中删除了名称)。
在我的 AppDelegate 中,首先调用 performActionForShortcutItem:completionHandler:
并发送用户选择的快捷方式。使用它来确定如何响应快捷方式。我将快捷方式传递给了一个方法,handleShortcutItem:shortcutItem"
可以确定我将使用哪个故事板(我知道现在 iPad 中没有 3D Touch,但我想在 Apple 推出时构建代码有一个)。
基于快捷方式,我创建了我的 ViewController 并将快捷方式传递给方法 logShortcutUsed
,传入快捷方式标题。
#pragma mark - Shortcut Items
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {
completionHandler([self handleShortcutItem:shortcutItem]);
}
- (BOOL)handleShortcutItem:(UIApplicationShortcutItem *)shortcutItem {
UIStoryboard *storyboard;
UINavigationController *navController = (UINavigationController *) self.window.rootViewController;
if (IS_IPAD()) {
storyboard = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil];
} else {
storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
}
xxxViewController *vb = (xxxViewController *)navController.topViewController;
if ([shortcutItem.localizedTitle isEqualToString:@"New Match"]) {
[vb logShortcutUsed:shortcutItem.localizedTitle];
[vb startNewMatch];
return TRUE;
} else if ([shortcutItem.localizedTitle isEqualToString:@"New Game"]) {
[vb logShortcutUsed:shortcutItem.localizedTitle];
[vb gamePressedFromShortcut];
return TRUE;
}
return FALSE;
}
在我的主要 ViewController 中,我创建了动态快捷方式(您可以使用静态或动态快捷方式)。这是用户在 3D Touch 图标上看到的内容。我也包括一个图标,这是可选的。 shortcutItems
只是一个 UIApplicationShortcutItem
数组。
- (void)setupDynamicShortcuts {
UIApplicationShortcutItem *newMatch = [[UIApplicationShortcutItem alloc] initWithType:@"$(PRODUCT_BUNDLE_IDENTIFIER).NewMatch"
localizedTitle:NSLocalizedString(@"New Match", @"Start a new match")
localizedSubtitle:NSLocalizedString(@"Start a new match", @"Start a new match button.")
icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"Sport Net-50"]
userInfo:nil];
UIApplicationShortcutItem *newGame = [[UIApplicationShortcutItem alloc] initWithType:@"$(PRODUCT_BUNDLE_IDENTIFIER).NewGame"
localizedTitle:NSLocalizedString(@"New Game", @"Start a new game")
localizedSubtitle:NSLocalizedString(@"Start a new game", @"Start a new game button.")
icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"volleyball-50"]
userInfo:nil];
[UIApplication sharedApplication].shortcutItems = @[newMatch, newGame];
}
在同一个 ViewController 中是将从 AppDelegate、startNewMatch
和gamePressedFromShortcut
。我还将这些调用记录到我的分析中,以便我可以跟踪人们使用此功能的次数,这是我强烈建议的。
它并不像最初看起来那么难。
我想在我的 objective c 应用程序中添加 3d 触摸主屏幕快捷方式。当按下 UIButton 时,我的应用程序的主要部分起作用。这将调用 ViewController.h 和 ViewController.m
中的方法- (IBAction)StartScanning:(id)sender;
这允许相机开始运行并推送正确的视图控制器和所需的方法。
我已经阅读了很多演练,但仍然无法理解如何在按下 3d 触摸快捷方式时启动此 IBAction。
抱歉,如果这是一个重复的问题,或者我只是愚蠢。我对这一切有点陌生。
这并不难,正如您所提到的,有很多教程可以提供帮助。总之,首先您需要将 3d touch delegate 添加到您的 ViewController.h 或 .m。 <UIViewControllerPreviewingDelegate>
这将使您能够访问显示主屏幕快捷方式所需的委托方法。这是我的一个应用程序的示例(在此示例中删除了名称)。
在我的 AppDelegate 中,首先调用 performActionForShortcutItem:completionHandler:
并发送用户选择的快捷方式。使用它来确定如何响应快捷方式。我将快捷方式传递给了一个方法,handleShortcutItem:shortcutItem"
可以确定我将使用哪个故事板(我知道现在 iPad 中没有 3D Touch,但我想在 Apple 推出时构建代码有一个)。
基于快捷方式,我创建了我的 ViewController 并将快捷方式传递给方法 logShortcutUsed
,传入快捷方式标题。
#pragma mark - Shortcut Items
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {
completionHandler([self handleShortcutItem:shortcutItem]);
}
- (BOOL)handleShortcutItem:(UIApplicationShortcutItem *)shortcutItem {
UIStoryboard *storyboard;
UINavigationController *navController = (UINavigationController *) self.window.rootViewController;
if (IS_IPAD()) {
storyboard = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil];
} else {
storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
}
xxxViewController *vb = (xxxViewController *)navController.topViewController;
if ([shortcutItem.localizedTitle isEqualToString:@"New Match"]) {
[vb logShortcutUsed:shortcutItem.localizedTitle];
[vb startNewMatch];
return TRUE;
} else if ([shortcutItem.localizedTitle isEqualToString:@"New Game"]) {
[vb logShortcutUsed:shortcutItem.localizedTitle];
[vb gamePressedFromShortcut];
return TRUE;
}
return FALSE;
}
在我的主要 ViewController 中,我创建了动态快捷方式(您可以使用静态或动态快捷方式)。这是用户在 3D Touch 图标上看到的内容。我也包括一个图标,这是可选的。 shortcutItems
只是一个 UIApplicationShortcutItem
数组。
- (void)setupDynamicShortcuts {
UIApplicationShortcutItem *newMatch = [[UIApplicationShortcutItem alloc] initWithType:@"$(PRODUCT_BUNDLE_IDENTIFIER).NewMatch"
localizedTitle:NSLocalizedString(@"New Match", @"Start a new match")
localizedSubtitle:NSLocalizedString(@"Start a new match", @"Start a new match button.")
icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"Sport Net-50"]
userInfo:nil];
UIApplicationShortcutItem *newGame = [[UIApplicationShortcutItem alloc] initWithType:@"$(PRODUCT_BUNDLE_IDENTIFIER).NewGame"
localizedTitle:NSLocalizedString(@"New Game", @"Start a new game")
localizedSubtitle:NSLocalizedString(@"Start a new game", @"Start a new game button.")
icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"volleyball-50"]
userInfo:nil];
[UIApplication sharedApplication].shortcutItems = @[newMatch, newGame];
}
在同一个 ViewController 中是将从 AppDelegate、startNewMatch
和gamePressedFromShortcut
。我还将这些调用记录到我的分析中,以便我可以跟踪人们使用此功能的次数,这是我强烈建议的。
它并不像最初看起来那么难。