deselectRowAtIndexPath для ABPeoplePickerNavigationController - PullRequest
5 голосов
/ 22 августа 2009

Я показываю ABPeoplePickerNavigationController в качестве вкладки в моем приложении. Пользователь щелкает имя, затем адрес электронной почты, затем я что-то делаю с адресом электронной почты.

После этого я хотел бы, чтобы выбранный ими человек и имущество исчезли (не выделены).

В обычной таблице я бы вызвал deselectRowAtIndexPath. Но с ABPeoplePickerNavCont у меня, кажется, нет доступа к его таблице, и я не знаю, какой выбран indexPath, и нет API для отмены выбора строки.

В большинстве приложений ABPeoplePickerNavCont используется модально, поэтому не имеет значения, что строка все еще подсвечивается, потому что все это отклоняется. Но в моем приложении оно не закрывается (как вкладка контактов в приложении "Телефон").

Есть идеи?

Ответы [ 3 ]

10 голосов
/ 04 января 2010

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

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]];

    cell.accessoryType = cell.accessoryType == UITableViewCellAccessoryNone ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;

    [cell setSelected:NO animated:YES];
}
4 голосов
/ 09 февраля 2012

Изменение ответа Робби Вальеса, вот как я отменяю выбор таблицы ABPeoplePickerNavigationController:

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]];

    cell.accessoryType = cell.accessoryType == UITableViewCellAccessoryNone ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;

    [tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:YES];
}

Надеюсь, это поможет.

3 голосов
/ 01 октября 2009

отклонить подборщик без анимации, а затем представить его снова без анимации. Выглядит хорошо.

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{

    [self dismissModalViewControllerAnimated:NO];

    [self presentModalViewController:peoplePicker animated:NO];
        return NO;
 }
...