CNContactViewController делает что-то странное с цепочкой респондента

Я пытаюсь реализовать ярлыки UIKeyCommand в моем приложении, и по большей части, кажется, работает нормально. За исключением случаев, когда я представляю CNContactViewController в модальном представлении, где кажется, что он делает что-то странное: после отклонения CNContactViewController сочетания клавиш по-прежнему отображаются в HUD для обнаружения, но перестают работать во всем приложении, даже если контроллер представления представления вручную вызывает контроллер представления 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и это правильно показывает FirstViewController в качестве первого ответчика. canBecomeFirstResponder определенно называется, так это keyCommands метод. Удержание клавиши "Command" вызывает HUD для обнаружения с появлением сочетаний клавиш.

Это явно какая-то ошибка в структуре контактов. Просто не знаю, как обойти это. призвание [self becomeFirstResponder] внутри dispatch_async или же dispatch_after с 1 секундами не работал. Хотелось бы услышать некоторые идеи.

Благодарю.

1 ответ

Решение

Обходной путь, который я придумал, заключался в том, чтобы поместить CNContactViewController в стек навигации, вместо того, чтобы пытаться представить его модально.

Другие вопросы по тегам