在ABPeoplePickerNavigationController中自定义表格单元格

时间:2011-03-11 08:14:19

标签: iphone objective-c ios uitableview abaddressbook

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

我开始使用ABPeoplePickerNavigationController,当用户点击一个人时,他们将被带到ABPersonViewController,在那里他们将能够选择电话号码和电子邮件地址。完成ABPersonViewController后,它们将被带回ABPeoplePickerNavigationController。非常简单的东西。

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

Apple's documentation说:

 You should not need to subclass these controllers; the expected way to modify their behavior is by your implementation of their delegate.

提供的委托方法不会处理此问题。有没有办法在没有继承自己的情况下实现这一目标?并且,如果我必须继承ABPeoplePickerNavigationController的子类,我将覆盖哪个方法来更新detailLabel?

谢谢!

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

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

通过它你可以理解。

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

ABRecord rec = [returnedArray objectAtIndex:0];

NSString * pid = rec.uniqueId

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

一旦你得到它,你可以通过使用该recordid /唯一ID从你的阵列中退出你想要的东西。