1

アプリに UIKeyCommand ショートカットを実装しようとしていますが、ほとんどの場合、うまく機能しているようです。CNContactViewController をモーダル ビューで表示した場合を除いて、奇妙なことをしているように見えますbecomeFirstResponder。 CNContactViewController は却下されました。

これは FirstViewController からのものです。

- (void) showCNContacts {

    CNContact * contact = [[CNContact alloc] init];

    CNContactViewController *createContact = [CNContactViewController viewControllerForNewContact: contact];
    createContact.delegate = self;
    createContact.allowsActions = NO;


    CNContactStore *store = [[CNContactStore alloc] init];
    createContact.contactStore = store;

    UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:createContact];
    navigation.modalPresentationStyle = UIModalPresentationPageSheet;

    [self presentViewController: navigation animated:YES completion: ^{
        NSLog(@"presented CNContactVC - responder = %@", [[[UIApplication sharedApplication] keyWindow] performSelector:@selector(firstResponder)]);
    }];
}

- (void)contactViewController:(CNContactViewController *)viewController didCompleteWithContact:(nullable CNContact *)contact {

    [viewController dismissViewControllerAnimated:YES completion:^{
        [self becomeFirstResponder];

        NSLog(@"after dismissing CNContactVC - responder = %@", [[[UIApplication sharedApplication] keyWindow] performSelector:@selector(firstResponder)]);
    }];
}

プライベート API を使用して を表示すると、ファーストレスポンダーとしてfirstResponder正しく表示されます。メソッドも確実に呼び出されます。Command キーを押したままにすると、キーボード ショートカットが表示されたディスカバリ HUD が表示されます。FirstViewControllercanBecomeFirstResponderkeyCommands

これは明らかに Contacts フレームワークの何らかのバグです。これを回避する方法がわかりません。または1 秒以内[self becomeFirstResponder]の呼び出しが機能しませんでした。いくつかのアイデアを聞きたいです。dispatch_asyncdispatch_after

ありがとう。

4

1 に答える 1