假设,我们有一个简单的应用程序,有一个视图控制器和单栏按钮项目,它将打开CNContactPieckerViewController
。因此,我进入选择器视图,选择联系人,进入详细信息视图。如果在我的视图控制器中实现了contactPicker:didSelectContactProperty:
委托方法,则按调用按钮将调用委托方法,CNContactPickerViewController
将被关闭,为了进行调用,我需要在委托方法中手动处理所有内容。但是,如果没有实现contactPicker:didSelectContactProperty:
委托方法,则会进行呼叫(基于您选择的呼叫类型 - GSM,WhatsApp或其他方式(,但CNContactPickerViewController
不会被驳回。
问题
是否有可能在不丢失处理呼叫功能的情况下CNContactPickerViewController
关闭。
您可以在调用连接和断开连接时为两种状态添加观察器,并且可以关闭CNContactPickerViewController
控制器。 但我建议使用contactPicker:didSelectContactProperty :
委托来实现此功能。
1.导入调用套件框架
#import <CallKit/CXCallObserver.h>
#import <CallKit/CXCall.h>
2.符合CXCallObserverDelegate
协议。
3.像这样强烈引用CXCallObserver
对象
@property (nonatomic, strong) CXCallObserver *callObserver;
4.在呈现CNContactPieckerViewController
时初始化调用观察者对象,如下所示
CXCallObserver *callObserver = [[CXCallObserver alloc] init];
[callObserver setDelegate:self queue:nil];
_callObserver = callObserver;
5.最后实现委托方法
-(void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call {
if (call.hasConnected) {
NSLog(@"********** voice call connected **********/n");
} else if(call.hasEnded) {
[(your CNContactPieckerViewController object) dismissViewControllerAnimated:YES completion:nil];
NSLog(@"********** voice call disconnected **********/n");
}
}