Настройка ячейки таблицы в ABPeoplePickerNavigationController - PullRequest
12 голосов
/ 11 марта 2011

Я потратил некоторое время на поиск этого ответа в SO, но не смог его найти, так что вот так:

Я начинаю с ABPeoplePickerNavigationController, и когда пользователь нажимает на человека, он попадает в ABPersonViewController, где он может выбирать номера телефонов и адреса электронной почты. После того, как они закончат с ABPersonViewController, они будут возвращены в ABPeoplePickerNavigationController. Довольно простые вещи.

Я хочу добавить элемент detailLabel в ячейку таблицы, которую они выбрали в ABPeoplePickerNavigationController после того, как они выбрали номер телефона или адрес электронной почты. Что-то вроде «Выбран адрес электронной почты и номер телефона» или «Номер телефона выбран».

Документация Apple гласит:

 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 ]

12 голосов
/ 02 мая 2012

Этот фрагмент кода, кажется, работает для меня, он захватывает ячейку, когда пользователь выбирает человека и добавляет галочку.Я полагаю, что в этот момент вы также можете настроить ячейку другими способами.

- (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;
}
0 голосов
/ 11 марта 2011

У меня есть идея, как это сделать, я думаю, что это будет полезно для вас, но никогда не реализовывалось таким образом.Сначала вы должны пойти с пользовательским столом.Для этой таблицы вы можете указать все имена контактов из вашей адресной книги.Вы можете использовать http://developer.apple.com/library/mac/#documentation/userexperience/Reference/AddressBook/Classes/ABAddressBook_Class/Reference/Reference.html

, просто пройдите через это, вы можете понять.

Вы должны использовать эти методы.1) - (NSArray *) люди, вы получите все записи людей в возвращенном массиве.каждая запись будет иметь уникальный идентификатор, вы должны получить его

ABRecord rec = [returnArray objectAtIndex: 0];

NSString * pid = rec.uniqueId

- (NSString*) uniqueId (это метод свойства ABRecord)

как только вы его получите, вы можете удалить из своего массива то, что вы хотите, используя этот идентификатор записи / уникального идентификатора.

...