簡體   English   中英

試圖讓靜態3D觸摸快速動作在Obj-C中工作

[英]Trying to get Static 3D touch Quick Actions to work in Obj-C

所以我想要一個非常基本的3D觸摸設置。 在我的主UI上,我有2個選項的分段控件,我基本上希望在使用3DQuickActionA時在打開時選擇一個選項,而在使用3DTouchQuickActionB時選擇另一個選項。

我在該網站上查看了其他問題,並建議使用以下問題:

- (void)handleShortCutItem:(UIApplicationShortcutItem *)shortcutItem  {
if([shortcutItem.type isEqualToString:@"3DQuickActionA"]){
    self.quote_opt.selectedSegmentIndex = 0;    }
if([shortcutItem.type isEqualToString:@"3DQuickActionB"]){
    self.quote_opt.selectedSegmentIndex = 1;    }
}

其中quote_opt是我的分段控件的名稱。

但是,這不起作用。 我的應用程序啟動正常,但是quote_opt的最后一個值是當前選項是什么— 3D觸摸操作什么也不做。 我確定我想念什么,但我不知道。 是否需要在viewdidload中添加內容?

任何建議將不勝感激,我很樂意張貼代碼的任何其他部分/回答解決問題所需的任何其他問題。

謝謝!

注意:在此之前,您應該檢查handleShortCutItem是否被調用,並且if-cases是否按預期工作,並且self.quote_opt不為nil。

另一個注意事項:3D通常在AppDelegate處理,是這樣嗎?

最后說明:您可能要看一下:

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler

由於3D動作是在打開應用程序后立即處理的,因此很有可能尚未加載視圖元素。 因此,您需要保存3D動作中的信息並進行相應加載。

您可以在負責的類中添加標志,然后在加載視圖后進行相應的修改。

易於切換的枚舉:

// You may add additional items to your enum.

typedef NS_ENUM(NSUInteger, ShortcutAction) {
    ShortcutActionNone,
    ShortcutActionA,
    ShortcutActionB,
};

處理快捷方式:

- (void)handleShortCutItem:(UIApplicationShortcutItem *)shortcutItem
{
    if([shortcutItem.type isEqualToString:@"3DQuickActionA"])
    {
        self.shortcutAction = ShortcutActionA;
    }
    else if([shortcutItem.type isEqualToString:@"3DQuickActionB"])
    {
        self.shortcutAction = ShortcutActionB;
    }
    // self.shortcutAction will be defaulted to 0 -> ShortcutActionNone.
}

處理網段切換:

// You should put this in the interface of your class.

@property ShortcutAction shortcutAction;

// And the implementation:

- (void)viewDidLoad
{
    [super viewDidLoad];

    if(!self.quote_opt)
    {
        // You have other problems, the quote_opt is not initialized yet, or properly.

        NSLog(@"ERR");
    }

    switch(self.shortcutAction)
    {
        case ShortcutActionNone:
        {
            // no-op
            break;
        }
        case ShortcutActionA:
        {
            self.quote_opt.selectedSegmentIndex = 0;

            break;
        }
        case ShortcutActionB:
        {
            self.quote_opt.selectedSegmentIndex = 1;

            break;
        }
    }
}

您還需要檢查didFinishLaunchingWithOptionslaunchOptions

因此,作為正在進行的聊天的結果,這是最新的代碼:

AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [FIRApp configure];

    if(launchOptions)
    {
        UIApplicationShortcutItem *selectedItem = [launchOptions objectForKey:UIApplicationLaunchOptionsShortcutItemKey];

        if(selectedItem)
        {
            [self applyShortcutItem:selectedItem];
        }
    }
    return YES;
}

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
{
    [self applyShortcutItem:shortcutItem];
}

- (void)applyShortcutItem:(UIApplicationShortcutItem *)shortcutItem
{
    ViewController *rootViewController = (ViewController *)[self.window rootViewController];

    if([shortcutItem.type isEqualToString:@"DogModeShortcut"])
    {
        [rootViewController setShortcutAction:LaunchDogMode];
    }
    else if([shortcutItem.type isEqualToString:@"CatModeShortcut"])
    {
        [rootViewController setShortcutAction:LaunchCatMode];
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM