12

我花了一些时间在 SO 上搜索这个答案,但找不到它,所以这里是:

我从 ABPeoplePickerNavigationController 开始,当用户点击一个人时,他们将被带到一个 ABPersonViewController,他们可以在其中选择电话号码和电子邮件地址。在他们完成 ABPersonViewController 之后,他们将被带回 ABPeoplePickerNavigationController。很简单的东西。

我想要的是在他们选择电话号码或电子邮件地址后,将 detailLabel 添加到他们在 ABPeoplePickerNavigationController 中选择的表格单元格中。诸如“选择的电子邮件和电话号码”或“选择的电话号码”之类的东西。

苹果的文档说:

您不需要对这些控制器进行子类化;修改其行为的预期方法是通过您实现其委托。

提供的委托方法不会处理这个问题。有没有办法在不继承自己的情况下做到这一点?而且,如果我必须继承 ABPeoplePickerNavigationController,我会重写哪个方法来更新 detailLabel?

谢谢!

4

2 回答 2

12

这段代码似乎对我有用,当用户选择一个人并添加一个复选标记时,它会抓取单元格。我猜您此时也可以通过其他方式调整单元格。

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{
UIView *view = peoplePicker.topViewController.view;
UITableView *tableView = nil;
for(UIView *uv in view.subviews)
{
    if([uv isKindOfClass:[UITableView class]])
    {
        tableView = (UITableView*)uv;
        break;
    }
}
if(tableView != nil)
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:[tableView indexPathForSelectedRow]];
    if(cell.accessoryType == UITableViewCellAccessoryNone){
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
    else{
        cell.accessoryType = UITableViewCellAccessoryNone;
    }        
    [cell setSelected:NO animated:YES];
}
return NO;
}
于 2012-05-02T17:16:14.173 回答
0

我知道该怎么做,我认为它会对您有所帮助,但从未像这样实施过。首先,您必须使用自定义表。对于该表,您可以提供地址簿中的所有联系人姓名。您可以使用http://developer.apple.com/library/mac/#documentation/userexperience/Reference/AddressBook/Classes/ABAddressBook_Class/Reference/Reference.html

只是通过它你可以理解。

你必须使用这些方法。1) - (NSArray *)people 你将把所有的人记录放到返回的数组中。每条记录都有唯一的 id ,你必须检索它

ABRecord rec = [returnedArray objectAtIndex:0];

NSString *pid = rec.uniqueId

-(NSString *) uniqueId (这是 ABRecord 属性方法)

一旦你得到它,你就可以通过使用该 recordid/unique id 从你的数组中取出你想要的东西。

于 2011-03-11T10:19:10.020 回答