Подтвердить что ты не робот

Настройка ячейки таблицы в ABPeoplePickerNavigationController

Я потратил некоторое время на поиск этого ответа на 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?

Спасибо!

4b9b3361

Ответ 1

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

- (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;
}

Ответ 2

У меня есть идея, как это сделать, я думаю, что это будет полезно для вас, но так и не реализовано. Сначала вы должны пойти с пользовательской таблицей. Для этой таблицы вы можете указать все имена контактов из своей адресной книги. вы можете использовать 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)

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