我在我的应用程序中使用ABPeoplePickerNavigationController,但客户希望看到名称前面的电话号码标签说"名称编号类型"阿里移动阿里家有没有办法定制ABPeoplePickerNavigationController来满足这个要求?谢谢
我尝试将ABPeoplePickerNavigationController导航栏的颜色更改为我的app颜色.但是没有发生变化.即使我试图隐藏它或至少改变状态栏色调颜色,也没有任何反应.为什么?
- (ABPeoplePickerNavigationController *)peoplePicker
{
if(!_peoplePicker){
_peoplePicker = [[ABPeoplePickerNavigationController alloc]init];
_peoplePicker.peoplePickerDelegate = self;
_peoplePicker.navigationBar.hidden = YES;
}
return _peoplePicker;
}
Run Code Online (Sandbox Code Playgroud)
我懒惰实例化我的导航控制器和其他方法调用,如解除视图控制器等工作正常.
编辑:这是我目前的代码(为赏金).没有像这样的颜色变化:
- (ABPeoplePickerNavigationController *)peoplePicker
{
if(!_peoplePicker){
_peoplePicker = [[ABPeoplePickerNavigationController alloc]init];
_peoplePicker.peoplePickerDelegate = self;
_peoplePicker.navigationBar.tintColor = [UIColor blackColor];
}
return _peoplePicker;
}
- (IBAction)addressBookButtonClicked:(id)sender {
[self presentViewController:self.peoplePicker animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
这不再适用于iOS8吗?
使用时peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person,会显示包含所有联系人信息的视图.我见过只显示所选信息的应用程序(例如电话号码).
我怎样才能做到这一点?我只想显示联系人的姓名和电话号码.
非常感谢你!
我的联系人列表在模拟器中完美显示.它需要电话号码并将其放在文本框中.所以我决定在我的iphone上尝试它,它实际上执行我点击的东西.它调用数字而不是将数字放在文本框中.继承人代码:
- (IBAction) adressBook: (id) sender {
// creating the picker
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
// place the delegate of the picker to the controll
picker.peoplePickerDelegate = self;
// showing the picker
[self presentModalViewController:picker animated:YES];
// releasing
[picker release];
}
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker {
// assigning control back to the main controller
[self dismissModalViewControllerAnimated:YES];
}
- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {
/*
ABMultiValueRef multi = ABRecordCopyValue(person, kABPersonPhoneProperty);
num.text = (NSString*)ABMultiValueCopyValueAtIndex(multi, 0);
//[self dismissModalViewControllerAnimated:YES];
*/
return YES;
}
- …Run Code Online (Sandbox Code Playgroud) 我要做的是向用户显示人物选择器,让他选择他想要的所有联系人,最后将所有这些联系人的电子邮件地址放在一个数组中.最好的方法是只向用户显示电子邮件的联系人.
到目前为止,我唯一能做的就是使用以下代码呈现人员选择器:
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
[self presentModalViewController:picker animated:YES];
Run Code Online (Sandbox Code Playgroud)
然后我试图使用此代码来获取所选联系人的电子邮件:
- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {
ABMultiValueRef multi = ABRecordCopyValue(person, kABPersonEmailProperty);
[email addObject:(__bridge NSString*)ABMultiValueCopyValueAtIndex(multi, 0)];
[self dismissModalViewControllerAnimated:YES];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
但是一旦我选择了联系人,选择器就会消失,所以我不知道如何继续.此外,当我选择一个联系人时,我在控制台中得到了这个:
"Unbalanced calls to begin/end appearance transitions for
<ABMembersViewController: 0xa1618c0>."
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
我ABPeoplePickerNavigationController用来显示地址簿用户,然后我回来 shouldContinueAfterSelectingPerson查看用户的手机和电子邮件.
但是,当我点击手机或电子邮件时,没有任何反应..我希望它发送短信或电子邮件.
这是我需要自己实现的吗?
我也回来了shouldContinueAfterSelectingPerson,不应该做的工作吗?
我开始为我的应用开发设置页面.
在此页面上,用户可以点击"+"按钮打开ABPeoplePickerNavigationController.点击联系人后,设置页面上的文本字段将使用所选用户的正确数据进行适当填充.
我明白,如果我想要检索某人的工作电子邮件,那就是:
NSString *workEmail = (__bridge NSString *)ABMultiValueCopyValueAtIndex(emails, 1);
Run Code Online (Sandbox Code Playgroud)
对于家庭来说,它将是:
NSString *homeEmail = (__bridge NSString *)ABMultiValueCopyValueAtIndex(emails, 0);
Run Code Online (Sandbox Code Playgroud)
但就检索不同类型的电话号码而言,我被困住了.
如果有人能告诉我如何获得与我收到两封电子邮件的方式类似的不同类型的电话号码,我将非常感激.
我有人选择工作ios 7,我正在尝试添加ios 8的兼容性.我已经将两种方法添加到一个但是我得到一个错误,说明了预期的标识符或'('在NSString*contactName之前的开始括号上任何建议都会很棒!
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {
[self peoplePickerNavigationController:peoplePicker shouldContinueAfterSelectingPerson:person property:property identifier:identifier];
NSString *contactName = CFBridgingRelease(ABRecordCopyCompositeName(person));
self.nameField.text = [NSString stringWithFormat:@"%@", contactName ? contactName : @"No Name"];
ABMultiValueRef phoneRecord = ABRecordCopyValue(person, kABPersonPhoneProperty);
CFStringRef phoneNumber = ABMultiValueCopyValueAtIndex(phoneRecord, 0);
self.phoneField.text = (__bridge_transfer NSString *)phoneNumber;
CFRelease(phoneRecord);
ABMultiValueRef email = ABRecordCopyValue(person, kABPersonEmailProperty);
CFStringRef emailField = ABMultiValueCopyValueAtIndex(email, 0);
self.emailField.text = (__bridge_transfer NSString *)emailField;
CFRelease(email);
CFDataRef photo = ABPersonCopyImageData(person);
UIImage* image = [UIImage imageWithData:(__bridge NSData*)photo];
if(photo)
CFRelease(photo);
if(image)
self.myImageView.image = image;
[self dismissViewControllerAnimated:YES completion:nil]; …Run Code Online (Sandbox Code Playgroud) 我的目标是允许用户从联系人中导入联系人详细信息(电话、姓名和电子邮件)。当我设置一个 ABPeoplePickerNavigationController 并将委托设置为 self 时,不会调用委托方法。正在显示人员选择器视图这是我的代码:
-(IBAction)importFromContacts:(id)sender
{
ABPeoplePickerNavigationController *newNavController = [[ABPeoplePickerNavigationController alloc] init];
newNavController.delegate = self;
[self presentViewController:newNavController animated:YES completion:nil];
}
-(void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker
{
NSLog(@"cancel");
[self dismissViewControllerAnimated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?我还想补充一点,ABPeoplePicker 类似乎不再是 UIAddressBook 框架的一部分。它也不在文档中。