2016-04-06 32 views
0

我想將3D觸摸主屏幕快捷方式添加到我的目標c應用程序。我的應用程序的主要部分在按下UIButton時起作用。這要求在ViewController.h的方法和ViewController.m在應用程序委託中調用IBAction

- (IBAction)StartScanning:(id)sender; 

這允許照相機開始工作並推動正確視圖控制器和所希望的方法。

我已閱讀了許多演練,但仍無法理解如何在按下3D觸控快捷鍵時啓動此IBAction。

對不起,如果這是一個重複的問題,或者我只是愚蠢。我對這一切都有點新鮮。

回答

0

這並不難,正如你所說,有很多教程可以幫助你。總之,首先你需要將3D touch委託添加到你的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觸摸圖標時會看到的內容。我還包括一個圖標,這是可選的。 shortcutItems只是一組UIApplicationShortcutItem s。

- (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中startNewMatchgamePressedFromShortcut被調用的方法。我還將這些電話記錄到我的分析中,以便我可以跟蹤人們使用此功能的次數,這是我強烈建議的。

這並不像最初看起來那麼困難。

+0

謝謝你。然後,我繼續在plist中添加快捷方式信息,因爲它沒有使用上面的代碼顯示。但它現在似乎工作,謝謝。 – user5394344