在要求访问地址簿联系人时自定义UIAlertView窗口文本

时间:2014-03-11 18:26:55

标签: ios iphone objective-c uialertview abaddressbook

我的应用中有一个视图控制器,需要访问用户的地址簿才能获得他们的联系人。

当用户第一次登陆视图控制器时,这是弹出的UIAlertView窗口:

enter image description here

我希望能够自定义UIAlertView窗口中的文本。我知道这是可能的,因为当使用像Secret这样的应用时,这就是他们想要访问你的地址簿时他们的UIAlertView窗口的样子:

enter image description here

那么,如何以编程方式请求访问通讯录联系人时如何自定义UIAlertView窗口内容?

以下是我目前使用的代码:

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view.

//Asks for access to Address Book.

ABAddressBookRef m_addressbook =  ABAddressBookCreateWithOptions(NULL, NULL);


ABAddressBookCopyArrayOfAllPeople(m_addressbook);


__block BOOL accessGranted = NO;
if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6
    dispatch_semaphore_t sema = dispatch_semaphore_create(0);
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        @autoreleasepool {

            // Write your code here...
            // Fetch data from SQLite DB
        }
    });

    ABAddressBookRequestAccessWithCompletion(m_addressbook, ^(bool granted, CFErrorRef error)

    {
        accessGranted = granted;

        NSLog(@"Has access been granted?: %hhd", accessGranted);
        NSLog(@"Has there been an error? %@", error);


        dispatch_semaphore_signal(sema);
    });
    dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
}
else { // we're on iOS 5 or older
    accessGranted = YES;

    NSLog(@"Address book access has been granted.");
}

if (accessGranted) {


    NSArray *allContacts = (__bridge_transfer NSArray
                            *)ABAddressBookCopyArrayOfAllPeople(m_addressbook);

2 个答案:

答案 0 :(得分:2)

您可以通过添加NSContactsUsageDescription键并使用指定说明的字符串值来设置说明您需要在应用程序属性列表中访问联系人的原因的文本。

答案 1 :(得分:0)

在Xcode中,选择您的AppName-info.plist,将项目添加到信息属性列表,选择隐私 - 联系人使用说明并设置描述字符串。如果您在模拟器上进行测试,请立即进入模拟器/常规/重置/重置位置和隐私设置。