ios - Cordova Contact Picker 插件调用

标签 ios objective-c cordova contacts

我正在使用以下插件从我的 iOS 应用程序中的联系人中选择一个电话号码:https://github.com/kolwit/com.kolwit.pickcontact

有两个问题:

当我点击一个联系人时,它会显示他们的所有信息,包括电子邮件和地址。有没有办法将其限制为仅电话号码?此外,当我点击一个电话号码时,它会开始调用该号码而不是提醒该号码。

代码如下:

 #import "PickContact.h"
#import <Cordova/CDVAvailability.h>

@implementation PickContact;
@synthesize callbackID;

- (void) chooseContact:(CDVInvokedUrlCommand*)command{
    self.callbackID = command.callbackId;

    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
    picker.peoplePickerDelegate = self;
    [self.viewController presentViewController:picker animated:YES completion:nil];
}

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person
                                property:(ABPropertyID)property
                              identifier:(ABMultiValueIdentifier)identifier
{
    if (kABPersonEmailProperty == property)
    {
        ABMultiValueRef multi = ABRecordCopyValue(person, kABPersonEmailProperty);
        int index = ABMultiValueGetIndexForIdentifier(multi, identifier);
        NSString *email = (__bridge NSString *)ABMultiValueCopyValueAtIndex(multi, index);
        NSString *displayName = (__bridge NSString *)ABRecordCopyCompositeName(person);


        ABMultiValueRef multiPhones = ABRecordCopyValue(person, kABPersonPhoneProperty);
        NSString* phoneNumber = @"";
        for(CFIndex i = 0; i < ABMultiValueGetCount(multiPhones); i++) {
            if(identifier == ABMultiValueGetIdentifierAtIndex (multiPhones, i)) {
                phoneNumber = (__bridge NSString *)ABMultiValueCopyValueAtIndex(multiPhones, i);
                break;
            }
        }

        NSMutableDictionary* contact = [NSMutableDictionary dictionaryWithCapacity:2];
        [contact setObject:email forKey: @"emailAddress"];
        [contact setObject:displayName forKey: @"displayName"];
        [contact setObject:phoneNumber forKey: @"phoneNr"];

        [super writeJavascript:[[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:contact] toSuccessCallbackString:self.callbackID]];
        [self.viewController dismissViewControllerAnimated:YES completion:nil];
        return NO;
    }
    return YES;
}

- (BOOL) personViewController:(ABPersonViewController*)personView shouldPerformDefaultActionForPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifierForValue
{
    return YES;
}

- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker{
    [self.viewController dismissViewControllerAnimated:YES completion:nil];
    [super writeJavascript:[[CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR
                                                              messageAsString:@"PickContact abort"]
                                            toErrorCallbackString:self.callbackID]];
}

@end

谢谢。

最佳答案

该错误现已在 1.0.4 版本中修复

https://github.com/kolwit/com.kolwit.pickcontact/tree/v1.0.4

关于ios - Cordova Contact Picker 插件调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24663161/

相关文章:

ios - 如何将 pushFrontViewController 与 SWRevealViewController 一起使用

ios - 在我的应用程序中发现了一个 NSZombie ......现在怎么办?

android - 在 Android 上的 HTML 5 应用程序上检测和应用当前系统语言

android - 应该使用哪种类型的通知是本地通知还是推送通知?

javascript - Cordova/Phonegap 文件功能不起作用

ios - didSelectItemAtIndexPath 中的 cell.contentView.viewWithTag 与 cell.viewWithTag 的工作方式不同

ios - override func prepare(for segue : UIStoryboardSegue, sender : Any?) 未被调用

ios - 返回主视图 Controller 后如何完全关闭 View Controller

objective-c - 尝试为 viewController 转换 iOS4 设置自定义动画时出错

ios - 在 Swift 中覆盖 Objective-C 类方法