CNContactViewController 对响应者链做了一些奇怪的事情

Posted

技术标签:

【中文标题】CNContactViewController 对响应者链做了一些奇怪的事情【英文标题】:CNContactViewController does something strange with responder chain 【发布时间】:2015-11-15 17:42:56 【问题描述】:

我正在尝试在我的应用程序中实现 UIKeyCommand 快捷方式,并且在大多数情况下,它似乎工作正常。除了当我在模态视图中呈现 CNContactViewController 时,它似乎做了一些奇怪的事情:关闭 CNContactViewController 后,键盘快捷键仍显示在可发现性 HUD 中,但在整个应用程序中停止工作,即使呈现视图控制器手动调用 @987654321 @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,并显示键盘快捷键。

这显然是联系人框架的某种错误。只是不确定如何解决这个问题。在 dispatch_asyncdispatch_after 内调用 [self becomeFirstResponder] 1 秒无效。很想听听一些想法。

谢谢。

【问题讨论】:

【参考方案1】:

我想出的解决方法是将 CNContactViewController 推送到导航堆栈上,而不是尝试以模态方式呈现它。

【讨论】:

以上是关于CNContactViewController 对响应者链做了一些奇怪的事情的主要内容,如果未能解决你的问题,请参考以下文章

CNContactViewController 隐藏导航栏

无法编辑或关闭 CNContactViewController (iOS)

CNContactViewController 导航栏背景颜色与我的应用不匹配

IOS Swift CNContactViewController 导航栏不显示 UINavigation 控制器

CNUI ERROR 联系人视图延迟出现超时

从原生控制器返回 Flutter 应用