无法编辑或关闭 CNContactViewController (iOS)
Unable to edit or dismiss CNContactViewController (iOS)
我在我的应用程序中展示了 CNContactViewController
的一个实例。我希望用户既能编辑联系人,又能关闭这个视图控制器。下面是呈现视图控制器的代码,它嵌入在 UINavigationController
中。正如您在代码中看到的那样,我有 allowsEditing = YES
,但查看屏幕截图;你可以看到我无法编辑。任何人都可以帮我看看我错过了什么?谢谢!
CNContactViewController *contactController = [CNContactViewController viewControllerForUnknownContact:contact];
contactController.allowsEditing = YES;
contactController.delegate = self;
contactController.contactStore = store;
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:contactController];
navController.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:navController animated:YES completion:nil];
编辑:我尝试了@WrightCS 建议的另一种方法:
[self presentViewController:contactController animated:YES completion:nil];
并且,确保添加此委托方法:
- (void)contactViewController:(CNContactViewController *)viewController
didCompleteWithContact:(CNContact *)contact{
[self dismissViewControllerAnimated:YES completion:nil];
}
但是,重复得到这个错误日志:
[CNUI ERROR] Contact view delayed appearance timed out
与其创建 UINavigationController
实例,不如尝试直接呈现接触控制器。
[self presentViewController:contactController animated:YES completion:nil];
CNContactViewControllerDelegate
- (void)contactViewController:(CNContactViewController *)viewController
didCompleteWithContact:(CNContact *)contact;
出现在主线程上
dispatch_async(dispatch_get_main_queue(), ^{
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:contactController];
navController.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:navController animated:YES completion:nil];
});
问题最终是我错误地初始化了 CNContactViewController
...而不是:
CNContactViewController *contactController = [CNContactViewController viewControllerForUnknownContact:contact];
这会显示一个联系人,但不允许取消联系人视图或编辑它的选项,正确的选项(对于我的情况)是使用
CNContactViewController *contactController = [CNContactViewController viewControllerForNewContact:contact];
我在我的应用程序中展示了 CNContactViewController
的一个实例。我希望用户既能编辑联系人,又能关闭这个视图控制器。下面是呈现视图控制器的代码,它嵌入在 UINavigationController
中。正如您在代码中看到的那样,我有 allowsEditing = YES
,但查看屏幕截图;你可以看到我无法编辑。任何人都可以帮我看看我错过了什么?谢谢!
CNContactViewController *contactController = [CNContactViewController viewControllerForUnknownContact:contact];
contactController.allowsEditing = YES;
contactController.delegate = self;
contactController.contactStore = store;
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:contactController];
navController.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:navController animated:YES completion:nil];
编辑:我尝试了@WrightCS 建议的另一种方法:
[self presentViewController:contactController animated:YES completion:nil];
并且,确保添加此委托方法:
- (void)contactViewController:(CNContactViewController *)viewController
didCompleteWithContact:(CNContact *)contact{
[self dismissViewControllerAnimated:YES completion:nil];
}
但是,重复得到这个错误日志:
[CNUI ERROR] Contact view delayed appearance timed out
与其创建 UINavigationController
实例,不如尝试直接呈现接触控制器。
[self presentViewController:contactController animated:YES completion:nil];
CNContactViewControllerDelegate
- (void)contactViewController:(CNContactViewController *)viewController
didCompleteWithContact:(CNContact *)contact;
出现在主线程上
dispatch_async(dispatch_get_main_queue(), ^{
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:contactController];
navController.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:navController animated:YES completion:nil];
});
问题最终是我错误地初始化了 CNContactViewController
...而不是:
CNContactViewController *contactController = [CNContactViewController viewControllerForUnknownContact:contact];
这会显示一个联系人,但不允许取消联系人视图或编辑它的选项,正确的选项(对于我的情况)是使用
CNContactViewController *contactController = [CNContactViewController viewControllerForNewContact:contact];